Preparation

Clean the environment.

Set locations, and the working directory.

A package-installation function.

Load those packages.

We will create a datestamp and define the Utrecht Science Park Colour Scheme.

# Function to grep data from glm()/lm()
GLM.CON <- function(fit, DATASET, x_name, y, verbose=c(TRUE,FALSE)){
  cat("Analyzing in dataset '", DATASET ,"' the association of '", x_name ,"' with '", y ,"' .\n")
  if (nrow(summary(fit)$coefficients) == 1) {
    output = c(DATASET, x_name, y, rep(NA,8))
    cat("Model not fitted; probably singular.\n")
  }else {
    cat("Collecting data.\n\n")
    effectsize = summary(fit)$coefficients[2,1]
    SE = summary(fit)$coefficients[2,2]
    OReffect = exp(summary(fit)$coefficients[2,1])
    CI_low = exp(effectsize - 1.96 * SE)
    CI_up = exp(effectsize + 1.96 * SE)
    tvalue = summary(fit)$coefficients[2,3]
    pvalue = summary(fit)$coefficients[2,4]
    R = summary(fit)$r.squared
    R.adj = summary(fit)$adj.r.squared
    sample_size = nrow(model.frame(fit))
    AE_N = AEDB.CEA.samplesize
    Perc_Miss = 100 - ((sample_size * 100)/AE_N)
    
    output = c(DATASET, x_name, y, effectsize, SE, OReffect, CI_low, CI_up, tvalue, pvalue, R, R.adj, AE_N, sample_size, Perc_Miss)
    
    if (verbose == TRUE) {
    cat("We have collected the following and summarize it in an object:\n")
    cat("Dataset...................:", DATASET, "\n")
    cat("Score/Exposure/biomarker..:", x_name, "\n")
    cat("Trait/outcome.............:", y, "\n")
    cat("Effect size...............:", round(effectsize, 6), "\n")
    cat("Standard error............:", round(SE, 6), "\n")
    cat("Odds ratio (effect size)..:", round(OReffect, 3), "\n")
    cat("Lower 95% CI..............:", round(CI_low, 3), "\n")
    cat("Upper 95% CI..............:", round(CI_up, 3), "\n")
    cat("T-value...................:", round(tvalue, 6), "\n")
    cat("P-value...................:", signif(pvalue, 8), "\n")
    cat("R^2.......................:", round(R, 6), "\n")
    cat("Adjusted r^2..............:", round(R.adj, 6), "\n")
    cat("Sample size of AE DB......:", AE_N, "\n")
    cat("Sample size of model......:", sample_size, "\n")
    cat("Missing data %............:", round(Perc_Miss, 6), "\n")
    } else {
      cat("Collecting data in summary object.\n")
    }
  }
  return(output)
  print(output)
}

GLM.BIN <- function(fit, DATASET, x_name, y, verbose=c(TRUE,FALSE)){
  cat("Analyzing in dataset '", DATASET ,"' the association of '", x_name ,"' with '", y ,"' ...\n")
  if (nrow(summary(fit)$coefficients) == 1) {
    output = c(DATASET, x_name, y, rep(NA,9))
    cat("Model not fitted; probably singular.\n")
  }else {
    cat("Collecting data...\n")
    effectsize = summary(fit)$coefficients[2,1]
    SE = summary(fit)$coefficients[2,2]
    OReffect = exp(summary(fit)$coefficients[2,1])
    CI_low = exp(effectsize - 1.96 * SE)
    CI_up = exp(effectsize + 1.96 * SE)
    zvalue = summary(fit)$coefficients[2,3]
    pvalue = summary(fit)$coefficients[2,4]
    dev <- fit$deviance
    nullDev <- fit$null.deviance
    modelN <- length(fit$fitted.values)
    R.l <- 1 - dev / nullDev
    R.cs <- 1 - exp(-(nullDev - dev) / modelN)
    R.n <- R.cs / (1 - (exp(-nullDev/modelN)))
    sample_size = nrow(model.frame(fit))
    AE_N = AEDB.CEA.samplesize
    Perc_Miss = 100 - ((sample_size * 100)/AE_N)
    
    output = c(DATASET, x_name, y, effectsize, SE, OReffect, CI_low, CI_up, zvalue, pvalue, R.l, R.cs, R.n, AE_N, sample_size, Perc_Miss)
    if (verbose == TRUE) {
    cat("We have collected the following and summarize it in an object:\n")
    cat("Dataset...................:", DATASET, "\n")
    cat("Score/Exposure/biomarker..:", x_name, "\n")
    cat("Trait/outcome.............:", y, "\n")
    cat("Effect size...............:", round(effectsize, 6), "\n")
    cat("Standard error............:", round(SE, 6), "\n")
    cat("Odds ratio (effect size)..:", round(OReffect, 3), "\n")
    cat("Lower 95% CI..............:", round(CI_low, 3), "\n")
    cat("Upper 95% CI..............:", round(CI_up, 3), "\n")
    cat("Z-value...................:", round(zvalue, 6), "\n")
    cat("P-value...................:", signif(pvalue, 8), "\n")
    cat("Hosmer and Lemeshow r^2...:", round(R.l, 6), "\n")
    cat("Cox and Snell r^2.........:", round(R.cs, 6), "\n")
    cat("Nagelkerke's pseudo r^2...:", round(R.n, 6), "\n")
    cat("Sample size of AE DB......:", AE_N, "\n")
    cat("Sample size of model......:", sample_size, "\n")
    cat("Missing data %............:", round(Perc_Miss, 6), "\n")
    } else {
      cat("Collecting data in summary object.\n")
    }
  }
  return(output)
  print(output)
}

Background

Using a Mendelian Randomization approach, we recently examined associations between the circulating levels of 41 cytokines and growth factors and the risk of stroke in the MEGASTROKE GWAS dataset (67,000 stroke cases and 450,000 controls) and found Monocyte chemoattractant protein-1 (MCP-1) as the cytokine showing the strongest association with stroke, particularly large artery and cardioembolic stroke (Georgakis et al., 2019a). Genetically elevated MCP-1 levels were also associated with a higher risk of coronary artery disease and myocardial infarction (Georgakis et al., 2019a). Further, in a meta-analysis of 6 observational population-based of longitudinal cohort studies we recently showed that baseline levels of MCP-1 were associated with a higher risk of ischemic stroke over follow-up (Georgakis et al., 2019b). While these data suggest a central role of MCP-1 in the pathogenesis of atherosclerosis, it remains unknown if MCP-1 levels in the blood really reflect MCP-1 activity. MCP-1 is expressed in the atherosclerotic plaque and attracts monocytes in the subendothelial space (Nelken et al., 1991; Papadopoulou et al., 2008; Takeya et al., 1993; Wilcox et al., 1994). Thus, MCP-1 levels in the plaque might more strongly reflect MCP-1 signaling. However, it remains unknown if MCP-1 plaque levels associate with plaque vulnerability or risk of cardiovascular events.

Objectives

Against this background we now aim to make use of the data from Athero-Express Biobank Study to explore the associations of MCP-1 protein levels in the atherosclerotic plaques from patients undergoing carotid endarterectomy with phenotypes of plaque vulnerability and secondary vascular events over a follow-up of three years.

Methods

We used the Luminex-platform to measure atherosclerotic plaque proteins. Historically, this was done in two experiments:

Experiment 1:

This entails an experiment where also 20+ other interleukins, cyto- and chemokines, and metalloproteinases were measured. Part of these were measured using LUMINEX, some of them were measured using FACS, ELISA, and activity assays. These assays were run according to instructions from the producer in a research setting.

  • variable MCP1: Monocyte chemotactic protein 1 (a.k.a. CCL2; Entrez Gene: 6347) concentration in plaque [pg/mL]. Luminex platform.

Experiment 2:

This entails an experiment where MCP1 was measured in a clinical diagnostic settings on a clinically validated Luminex-platform. - variable MCP1_pg_ml_2015: Monocyte chemotactic protein 1 (a.k.a. CCL2; Entrez Gene: 6347) concentration in plaque [pg/mL]. Luminex platform.

Loading data

Clinical data

Loading Athero-Express clinical data.

require(haven)

# AEDB <- haven::read_sav(paste0(AEDB_loc, "/2019-3NEW_AtheroExpressDatabase_ScientificAE_02072019_IC_added.sav"))
AEDBraw <- haven::read_sav(paste0(AEDB_loc, "/2020_1_NEW_AtheroExpressDatabase_ScientificAE_16-03-2020.sav"))

head(AEDBraw)

Plaque protein data

Loading Athero-Express plaque protein measurements from 2015.

library(openxlsx)
AEDB_Protein_2015 <- openxlsx::read.xlsx(paste0(AEDB_loc, "/_AE_Proteins/Cytokines_and_chemokines_2015/20200629_MPCF015-0024.xlsx"), sheet = "for_SPSS_R")

names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "SampleID"] <- "STUDY_NUMBER"

head(AEDB_Protein_2015)
NA

Merging protein data

We will merge these measurements to the AEDB (pg/mL measurements of MCP1). We also gathered more information on the experiment.

names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "IL6_pg_ml"] <- "IL6_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "IL6R_pg_ml"] <- "IL6R_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "IL8_pg_ml"] <- "IL8_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "MCP1_pg_ml"] <- "MCP1_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "RANTES_pg_ml"] <- "RANTES_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "PAI1_pg_ml"] <- "PAI1_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "MCSF_pg_ml"] <- "MCSF_pg_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "Adiponectin_ng_ml"] <- "Adiponectin_ng_ml_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "Segment_isolated_Tris"] <- "Segment_isolated_Tris_2015"
names(AEDB_Protein_2015)[names(AEDB_Protein_2015) == "Tris_protein_conc_ug_ml"] <- "Tris_protein_conc_ug_ml_2015"

temp <- subset(AEDB_Protein_2015, select = c("STUDY_NUMBER", "IL6_pg_ml_2015", "IL6R_pg_ml_2015", "IL8_pg_ml_2015", "MCP1_pg_ml_2015", "RANTES_pg_ml_2015", "PAI1_pg_ml_2015", "MCSF_pg_ml_2015", "Adiponectin_ng_ml_2015", "Segment_isolated_Tris_2015", "Tris_protein_conc_ug_ml_2015"))

AEDB <- merge(AEDBraw, temp, by.x = "STUDY_NUMBER", by.y = "STUDY_NUMBER", sort = FALSE,
              all.x = TRUE)
rm(temp)

temp <- subset(AEDB, select = c("STUDY_NUMBER", "MCP1", "MCP1_pg_ug_2015", "MCP1_pg_ml_2015", "Segment_isolated_Tris_2015"))
dim(temp)
[1] 3793    5
head(temp)
rm(temp)   

Examine AEDB

We can examine the contents of the Athero-Express Biobank dataset to know what each variable is called, what class (type) it has, and what the variable description is.

There is an excellent post on this: https://www.r-bloggers.com/working-with-spss-labels-in-r/.

AEDB %>% sjPlot::view_df(show.type = TRUE,
                         show.frq = TRUE,
                         show.prc = TRUE,
                         show.na = TRUE, 
                         max.len = TRUE, 
                         wrap.labels = 20,
                         verbose = FALSE, 
                         use.viewer = FALSE,
                         file = paste0(OUT_loc, "/", Today, ".AEDB.dictionary.html")) 
Following 3 variables have only missing values and are not shown:
yearpsy5 [326], yearchol3 [347], yearablo3 [419]

Fixing and creating variables

We need to be very strict in defining symptoms. Therefore we will fix a new variable that groups symptoms at inclusion.

Coding of symptoms is as follows:

  • missing -999
  • Asymptomatic 0
  • TIA 1
  • minor stroke 2
  • Major stroke 3
  • Amaurosis fugax 4
  • Four vessel disease 5
  • Vertebrobasilary TIA 7
  • Retinal infarction 8
  • Symptomatic, but aspecific symtoms 9
  • Contralateral symptomatic occlusion 10
  • retinal infarction 11
  • armclaudication due to occlusion subclavian artery, CEA needed for bypass 12
  • retinal infarction + TIAs 13
  • Ocular ischemic syndrome 14
  • ischemisch glaucoom 15
  • subclavian steal syndrome 16
  • TGA 17

We will group as follows in Symptoms.5G:

  1. Asymptomatic > 0
  2. TIA > 1, 7, 13
  3. Stroke > 2, 3
  4. Ocular > 4, 14, 15
  5. Retinal infarction > 8, 11
  6. Other > 5, 9, 10, 12, 16, 17

We will also group as follows in AsymptSympt:

  1. Asymptomatic > 0
  2. TIA > 1, 7, 13 + Stroke > 2, 3
  3. Ocular > 4, 14, 15 + Retinal infarction > 8, 11 + Other > 5, 9, 10, 12, 16, 17

We will also group as follows in AsymptSympt2G:

  1. Asymptomatic > 0
  2. TIA > 1, 7, 13 + Stroke > 2, 3 Ocular > 4, 14, 15 + Retinal infarction > 8, 11 + Other > 5, 9, 10, 12, 16, 17
# Fix symptoms

attach(AEDB)

AEDB$sympt[is.na(AEDB$sympt)] <- -999

# Symptoms.5G
AEDB[,"Symptoms.5G"] <- NA
# AEDB$Symptoms.5G[sympt == "NA"] <- "Asymptomatic"
AEDB$Symptoms.5G[sympt == -999] <- NA
AEDB$Symptoms.5G[sympt == 0] <- "Asymptomatic"
AEDB$Symptoms.5G[sympt == 1 | sympt == 7 | sympt == 13] <- "TIA"
AEDB$Symptoms.5G[sympt == 2 | sympt == 3] <- "Stroke"
AEDB$Symptoms.5G[sympt == 4 | sympt == 14 | sympt == 15 ] <- "Ocular"
AEDB$Symptoms.5G[sympt == 8 | sympt == 11] <- "Retinal infarction"
AEDB$Symptoms.5G[sympt == 5 | sympt == 9 | sympt == 10 | sympt == 12 | sympt == 16 | sympt == 17] <- "Other"

# AsymptSympt
AEDB[,"AsymptSympt"] <- NA
AEDB$AsymptSympt[sympt == -999] <- NA
AEDB$AsymptSympt[sympt == 0] <- "Asymptomatic"
AEDB$AsymptSympt[sympt == 1 | sympt == 7 | sympt == 13 | sympt == 2 | sympt == 3] <- "Symptomatic"
AEDB$AsymptSympt[sympt == 4 | sympt == 14 | sympt == 15 | sympt == 8 | sympt == 11 | sympt == 5 | sympt == 9 | sympt == 10 | sympt == 12 | sympt == 16 | sympt == 17] <- "Ocular and others"

# AsymptSympt
AEDB[,"AsymptSympt2G"] <- NA
AEDB$AsymptSympt2G[sympt == -999] <- NA
AEDB$AsymptSympt2G[sympt == 0] <- "Asymptomatic"
AEDB$AsymptSympt2G[sympt == 1 | sympt == 7 | sympt == 13 | sympt == 2 | sympt == 3 | sympt == 4 | sympt == 14 | sympt == 15 | sympt == 8 | sympt == 11 | sympt == 5 | sympt == 9 | sympt == 10 | sympt == 12 | sympt == 16 | sympt == 17] <- "Symptomatic"

detach(AEDB)

# table(AEDB$sympt, useNA = "ifany")
# table(AEDB$AsymptSympt2G, useNA = "ifany")
# table(AEDB$Symptoms.5G, useNA = "ifany")
# 
# table(AEDB$AsymptSympt2G, AEDB$sympt, useNA = "ifany")
# table(AEDB$Symptoms.5G, AEDB$sympt, useNA = "ifany")
table(AEDB$AsymptSympt2G, AEDB$Symptoms.5G, useNA = "ifany")
              
               Asymptomatic Ocular Other Retinal infarction Stroke  TIA <NA>
  Asymptomatic          333      0     0                  0      0    0    0
  Symptomatic             0    417   119                 43    733 1045    0
  <NA>                    0      0     0                  0      0    0 1103
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "sympt", "Symptoms.5G", "AsymptSympt"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# table(AEDB.temp$Symptoms.5G, AEDB.temp$AsymptSympt)
# 
# rm(AEDB.temp)

We will also fix the plaquephenotypes variable.

Coding of symptoms is as follows:

  • missing -999
  • not relevant -888
  • fibrous 1
  • fibroatheromatous 2
  • atheromatous 3

# Fix plaquephenotypes
attach(AEDB)
AEDB[,"OverallPlaquePhenotype"] <- NA
AEDB$OverallPlaquePhenotype[plaquephenotype == -999] <- NA
AEDB$OverallPlaquePhenotype[plaquephenotype == -999] <- NA
AEDB$OverallPlaquePhenotype[plaquephenotype == 1] <- "fibrous"
AEDB$OverallPlaquePhenotype[plaquephenotype == 2] <- "fibroatheromatous"
AEDB$OverallPlaquePhenotype[plaquephenotype == 3] <- "atheromatous"
detach(AEDB)

table(AEDB$OverallPlaquePhenotype)

     atheromatous fibroatheromatous           fibrous 
              550               843              1439 
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "plaquephenotype", "OverallPlaquePhenotype"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

We will also fix the diabetes status variable. We define diabetes as history of a diagnosis and/or use of glucose-lowering medications.

# Fix diabetes
attach(AEDB)
AEDB[,"DiabetesStatus"] <- NA
AEDB$DiabetesStatus[DM.composite == -999] <- NA
AEDB$DiabetesStatus[DM.composite == 0] <- "Control (no Diabetes Dx/Med)"
AEDB$DiabetesStatus[DM.composite == 1] <- "Diabetes"
detach(AEDB)

table(AEDB$DM.composite)

   0    1 
2766  985 
table(AEDB$DiabetesStatus)

Control (no Diabetes Dx/Med)                     Diabetes 
                        2766                          985 
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "DM.composite", "DiabetesStatus"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# AEDB.temp$DiabetesStatus <- to_factor(AEDB.temp$DiabetesStatus)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

We will also fix the smoking status variable. We are interested in whether someone never, ever or is currently (at the time of inclusion) smoking. This is based on the questionnaire.

  • diet801: are you a smoker?
  • diet802: did you smoke in the past?

We already have some variables indicating smoking status:

  • SmokingReported: patient has reported to smoke.
  • SmokingYearOR: smoking in the year of surgery?
  • SmokerCurrent: currently smoking?
require(labelled)
AEDB$diet801 <- to_factor(AEDB$diet801)
AEDB$diet802 <- to_factor(AEDB$diet802)
AEDB$diet805 <- to_factor(AEDB$diet805)
AEDB$SmokingReported <- to_factor(AEDB$SmokingReported)
AEDB$SmokerCurrent <- to_factor(AEDB$SmokerCurrent)
AEDB$SmokingYearOR <- to_factor(AEDB$SmokingYearOR)

# table(AEDB$diet801)
# table(AEDB$diet802)
# table(AEDB$SmokingReported)
# table(AEDB$SmokerCurrent)
# table(AEDB$SmokingYearOR)
# table(AEDB$SmokingReported, AEDB$SmokerCurrent, useNA = "ifany", dnn = c("Reported smoking", "Current smoker"))
# 
# table(AEDB$diet801, AEDB$diet802, useNA = "ifany", dnn = c("Smoker", "Past smoker"))

cat("\nFixing smoking status.\n")

Fixing smoking status.
attach(AEDB)
AEDB[,"SmokerStatus"] <- NA
AEDB$SmokerStatus[diet802 == "don't know"] <- "Never smoked"
AEDB$SmokerStatus[diet802 == "I still smoke"] <- "Current smoker"
AEDB$SmokerStatus[SmokerCurrent == "no" & diet802 == "no"] <- "Never smoked"
AEDB$SmokerStatus[SmokerCurrent == "no" & diet802 == "yes"] <- "Ex-smoker"
AEDB$SmokerStatus[SmokerCurrent == "yes"] <- "Current smoker"
AEDB$SmokerStatus[SmokerCurrent == "no data available/missing"] <- NA
# AEDB$SmokerStatus[is.na(SmokerCurrent)] <- "Never smoked"
detach(AEDB)

cat("\n* Current smoking status.\n")

* Current smoking status.
table(AEDB$SmokerCurrent,
      useNA = "ifany", 
      dnn = c("Current smoker"))
Current smoker
no data available/missing                        no                       yes                      <NA> 
                        0                      2364                      1310                       119 
cat("\n* Updated smoking status.\n")

* Updated smoking status.
table(AEDB$SmokerStatus,
      useNA = "ifany", 
      dnn = c("Updated smoking status"))
Updated smoking status
Current smoker      Ex-smoker   Never smoked           <NA> 
          1310           1814            389            280 
cat("\n* Comparing to 'SmokerCurrent'.\n")

* Comparing to 'SmokerCurrent'.
table(AEDB$SmokerStatus, AEDB$SmokerCurrent, 
      useNA = "ifany", 
      dnn = c("Updated smoking status", "Current smoker"))
                      Current smoker
Updated smoking status no data available/missing   no  yes <NA>
        Current smoker                         0    0 1310    0
        Ex-smoker                              0 1814    0    0
        Never smoked                           0  389    0    0
        <NA>                                   0  161    0  119
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "DM.composite", "DiabetesStatus"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# AEDB.temp$DiabetesStatus <- to_factor(AEDB.temp$DiabetesStatus)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

We will also fix the alcohol status variable.


# Fix diabetes
attach(AEDB)
AEDB[,"AlcoholUse"] <- NA
AEDB$AlcoholUse[diet810 == -999] <- NA
AEDB$AlcoholUse[diet810 == 0] <- "No"
AEDB$AlcoholUse[diet810 == 1] <- "Yes"
detach(AEDB)

table(AEDB$AlcoholUse)

  No  Yes 
1238 2346 
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "diet810", "AlcoholUse"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# AEDB.temp$AlcoholUse <- to_factor(AEDB.temp$AlcoholUse)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

We will also fix a history of CAD, stroke or peripheral intervention status variable. This will be based on CAD_history, Stroke_history, and Peripheral.interv


# Fix diabetes
attach(AEDB)
AEDB[,"MedHx_CVD"] <- NA
AEDB$MedHx_CVD[CAD_history == 0 | Stroke_history == 0 | Peripheral.interv == 0] <- "No"
AEDB$MedHx_CVD[CAD_history == 1 | Stroke_history == 1 | Peripheral.interv == 1] <- "yes"
detach(AEDB)

table(AEDB$CAD_history)

   0    1 
2432 1285 
table(AEDB$Stroke_history)

   0    1 
2764  948 
table(AEDB$Peripheral.interv)

   0    1 
2581 1099 
table(AEDB$MedHx_CVD)

  No  yes 
1310 2476 
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "diet810", "AlcoholUse"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# AEDB.temp$AlcoholUse <- to_factor(AEDB.temp$AlcoholUse)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

Athero-Express Biobank Study

Baseline characteristics

We are interested in the following variables at baseline.

  • Age (years)
  • Female sex (N, %)
  • Hypertension (N, %)
  • SBP (mmHg)
  • DBP (mmHg)
  • Diabetes mellitus (N, %)
  • Total cholesterol levels (mg/dL)
  • LDL cholesterol levels (mg/dL)
  • HDL cholesterol levels (mg/dL)
  • Triglyceride levels (mg/dL)
  • Use of statins (N, %)
  • Use of antiplatelet drugs (N, %)
  • BMI (kg/m²)
  • Smoking status (N, %)
    • Never smokers
    • Ex-smokers
    • Current smokers
  • History of CAD (N, %)
  • History of PAD (N, %)
  • Clinical manifestations
    • Asymptomatic
    • Amaurosis fugax
    • TIA
    • Stroke
  • eGFR (mL/min/1.73 m²)
  • MCP-1 plaque levels (pg/mL) (LUMINEX based, two experiments MCP1, and MCP1_pg_ml_2015)
cat("===========================================================================================\n")
===========================================================================================
cat("CREATE BASELINE TABLE\n")
CREATE BASELINE TABLE
# Baseline table variables
basetable_vars = c("Hospital", "ORyear",
                   "Age", "Gender", 
                   "TC_finalCU", "LDL_finalCU", "HDL_finalCU", "TG_finalCU", 
                   "TC_final", "LDL_final", "HDL_final", "TG_final", 
                   "hsCRP_plasma",
                   "systolic", "diastoli", "GFR_MDRD", "BMI", 
                   "KDOQI", "BMI_WHO",
                   "SmokerStatus", "AlcoholUse",
                   "DiabetesStatus", 
                   "Hypertension.selfreport", "Hypertension.selfreportdrug", "Hypertension.composite", "Hypertension.drugs", 
                   "Med.anticoagulants", "Med.all.antiplatelet", "Med.Statin.LLD", 
                   "Stroke_Dx", "sympt", "Symptoms.5G", "AsymptSympt", "AsymptSympt2G",
                   "restenos", "stenose",
                   "MedHx_CVD", "CAD_history", "PAOD", "Peripheral.interv", 
                   "EP_composite", "EP_composite_time",
                   "macmean0", "smcmean0", "Macrophages.bin", "SMC.bin",
                   "neutrophils", "Mast_cells_plaque",
                   "IPH.bin", "vessel_density_averaged",
                   "Calc.bin", "Collagen.bin", 
                   "Fat.bin_10", "Fat.bin_40", "OverallPlaquePhenotype",
                   "IL6", "IL6R_pg_ml_2015",
                   "MCP1", "MCP1_pg_ml_2015")

basetable_bin = c("Gender", 
                  "KDOQI", "BMI_WHO",
                  "SmokerStatus", "AlcoholUse",
                  "DiabetesStatus", 
                  "Hypertension.selfreport", "Hypertension.selfreportdrug", "Hypertension.composite", "Hypertension.drugs", 
                  "Med.anticoagulants", "Med.all.antiplatelet", "Med.Statin.LLD", 
                  "Stroke_Dx", "sympt", "Symptoms.5G", "AsymptSympt", "AsymptSympt2G",
                  "restenos", "stenose",
                  "CAD_history", "PAOD", "Peripheral.interv", 
                  "EP_composite", "Macrophages.bin", "SMC.bin",
                  "IPH.bin", 
                  "Calc.bin", "Collagen.bin", 
                  "Fat.bin_10", "Fat.bin_40", "OverallPlaquePhenotype")
# basetable_bin

basetable_con = basetable_vars[!basetable_vars %in% basetable_bin]
# basetable_con

All patients

Showing the baseline table of the whole Athero-Express Biobank.

# Create baseline tables
# http://rstudio-pubs-static.s3.amazonaws.com/13321_da314633db924dc78986a850813a50d5.html
AEDB.tableOne = print(CreateTableOne(vars = basetable_vars, 
                                         # factorVars = basetable_bin,
                                         # strata = "Symptoms.4g",
                                         data = AEDB, includeNA = TRUE), 
                          nonnormal = c(), missing = TRUE,
                          quote = FALSE, noSpaces = FALSE, showAllLevels = TRUE, explain = TRUE, 
                          format = "pf", 
                          contDigits = 3)[,1:3]
                                      
                                       level                                                                     Overall           Missing
  n                                                                                                                 3793                  
  Hospital % (freq)                    St. Antonius, Nieuwegein                                                     45.7 (1735)     0.0   
                                       UMC Utrecht                                                                  54.3 (2058)           
  ORyear % (freq)                      No data available/missing                                                     0.0 (   0)     0.0   
                                       2002                                                                          2.5 (  94)           
                                       2003                                                                          5.4 ( 204)           
                                       2004                                                                          7.6 ( 289)           
                                       2005                                                                          8.1 ( 309)           
                                       2006                                                                          7.5 ( 285)           
                                       2007                                                                          6.2 ( 234)           
                                       2008                                                                          5.9 ( 223)           
                                       2009                                                                          7.1 ( 268)           
                                       2010                                                                          8.1 ( 307)           
                                       2011                                                                          7.1 ( 270)           
                                       2012                                                                          8.2 ( 312)           
                                       2013                                                                          6.9 ( 262)           
                                       2014                                                                          7.9 ( 299)           
                                       2015                                                                          2.1 (  79)           
                                       2016                                                                          3.3 ( 124)           
                                       2017                                                                          2.2 (  85)           
                                       2018                                                                          2.1 (  80)           
                                       2019                                                                          1.8 (  69)           
  Age (mean (SD))                                                                                                 68.906 (9.322)    0.0   
  Gender % (freq)                      female                                                                       30.6 (1161)     0.0   
                                       male                                                                         69.4 (2632)           
  TC_finalCU (mean (SD))                                                                                         185.256 (81.509)  46.8   
  LDL_finalCU (mean (SD))                                                                                        106.533 (40.725)  54.5   
  HDL_finalCU (mean (SD))                                                                                         46.591 (16.725)  51.1   
  TG_finalCU (mean (SD))                                                                                         154.212 (99.774)  51.8   
  TC_final (mean (SD))                                                                                             4.798 (2.111)   46.8   
  LDL_final (mean (SD))                                                                                            2.759 (1.055)   54.5   
  HDL_final (mean (SD))                                                                                            1.207 (0.433)   51.1   
  TG_final (mean (SD))                                                                                             1.743 (1.127)   51.8   
  hsCRP_plasma (mean (SD))                                                                                        19.231 (206.750) 60.6   
  systolic (mean (SD))                                                                                           150.901 (25.114)  13.5   
  diastoli (mean (SD))                                                                                            79.933 (21.847)  13.5   
  GFR_MDRD (mean (SD))                                                                                            74.844 (24.740)   6.5   
  BMI (mean (SD))                                                                                                 26.336 (4.050)    7.5   
  KDOQI % (freq)                       No data available/missing                                                     0.0 (   0)     6.6   
                                       Normal kidney function                                                       22.1 ( 839)           
                                       CKD 2 (Mild)                                                                 47.2 (1789)           
                                       CKD 3 (Moderate)                                                             21.9 ( 831)           
                                       CKD 4 (Severe)                                                                1.4 (  53)           
                                       CKD 5 (Failure)                                                               0.8 (  32)           
                                       <NA>                                                                          6.6 ( 249)           
  BMI_WHO % (freq)                     No data available/missing                                                     0.0 (   0)     7.5   
                                       Underweight                                                                   1.2 (  44)           
                                       Normal                                                                       35.2 (1336)           
                                       Overweight                                                                   42.1 (1595)           
                                       Obese                                                                        14.1 ( 533)           
                                       <NA>                                                                          7.5 ( 285)           
  SmokerStatus % (freq)                Current smoker                                                               34.5 (1310)     7.4   
                                       Ex-smoker                                                                    47.8 (1814)           
                                       Never smoked                                                                 10.3 ( 389)           
                                       <NA>                                                                          7.4 ( 280)           
  AlcoholUse % (freq)                  No                                                                           32.6 (1238)     5.5   
                                       Yes                                                                          61.9 (2346)           
                                       <NA>                                                                          5.5 ( 209)           
  DiabetesStatus % (freq)              Control (no Diabetes Dx/Med)                                                 72.9 (2766)     1.1   
                                       Diabetes                                                                     26.0 ( 985)           
                                       <NA>                                                                          1.1 (  42)           
  Hypertension.selfreport % (freq)     No data available/missing                                                     0.0 (   0)     4.0   
                                       no                                                                           23.7 ( 900)           
                                       yes                                                                          72.3 (2742)           
                                       <NA>                                                                          4.0 ( 151)           
  Hypertension.selfreportdrug % (freq) No data available/missing                                                     0.0 (   0)     5.5   
                                       no                                                                           28.6 (1086)           
                                       yes                                                                          65.9 (2500)           
                                       <NA>                                                                          5.5 ( 207)           
  Hypertension.composite % (freq)      No data available/missing                                                     0.0 (   0)     1.3   
                                       no                                                                           13.3 ( 505)           
                                       yes                                                                          85.4 (3240)           
                                       <NA>                                                                          1.3 (  48)           
  Hypertension.drugs % (freq)          No data available/missing                                                     0.0 (   0)     1.5   
                                       no                                                                           21.0 ( 798)           
                                       yes                                                                          77.5 (2940)           
                                       <NA>                                                                          1.5 (  55)           
  Med.anticoagulants % (freq)          No data available/missing                                                     0.0 (   0)     1.6   
                                       no                                                                           85.6 (3248)           
                                       yes                                                                          12.8 ( 485)           
                                       <NA>                                                                          1.6 (  60)           
  Med.all.antiplatelet % (freq)        No data available/missing                                                     0.0 (   0)     1.6   
                                       no                                                                           13.7 ( 521)           
                                       yes                                                                          84.7 (3213)           
                                       <NA>                                                                          1.6 (  59)           
  Med.Statin.LLD % (freq)              No data available/missing                                                     0.0 (   0)     1.5   
                                       no                                                                           21.8 ( 826)           
                                       yes                                                                          76.7 (2911)           
                                       <NA>                                                                          1.5 (  56)           
  Stroke_Dx % (freq)                   Missing                                                                       0.0 (   0)     8.1   
                                       No stroke diagnosed                                                          74.4 (2823)           
                                       Stroke diagnosed                                                             17.5 ( 663)           
                                       <NA>                                                                          8.1 ( 307)           
  sympt % (freq)                       missing                                                                      29.1 (1103)     0.0   
                                       Asymptomatic                                                                  8.8 ( 333)           
                                       TIA                                                                          27.4 (1040)           
                                       minor stroke                                                                 12.1 ( 458)           
                                       Major stroke                                                                  7.3 ( 275)           
                                       Amaurosis fugax                                                              10.5 ( 399)           
                                       Four vessel disease                                                           1.1 (  43)           
                                       Vertebrobasilary TIA                                                          0.1 (   5)           
                                       Retinal infarction                                                            1.0 (  37)           
                                       Symptomatic, but aspecific symtoms                                            1.6 (  61)           
                                       Contralateral symptomatic occlusion                                           0.3 (  12)           
                                       retinal infarction                                                            0.2 (   6)           
                                       armclaudication due to occlusion subclavian artery, CEA needed for bypass     0.0 (   1)           
                                       retinal infarction + TIAs                                                     0.0 (   0)           
                                       Ocular ischemic syndrome                                                      0.5 (  18)           
                                       ischemisch glaucoom                                                           0.0 (   0)           
                                       subclavian steal syndrome                                                     0.1 (   2)           
                                       TGA                                                                           0.0 (   0)           
  Symptoms.5G % (freq)                 Asymptomatic                                                                  8.8 ( 333)    29.1   
                                       Ocular                                                                       11.0 ( 417)           
                                       Other                                                                         3.1 ( 119)           
                                       Retinal infarction                                                            1.1 (  43)           
                                       Stroke                                                                       19.3 ( 733)           
                                       TIA                                                                          27.6 (1045)           
                                       <NA>                                                                         29.1 (1103)           
  AsymptSympt % (freq)                 Asymptomatic                                                                  8.8 ( 333)    29.1   
                                       Ocular and others                                                            15.3 ( 579)           
                                       Symptomatic                                                                  46.9 (1778)           
                                       <NA>                                                                         29.1 (1103)           
  AsymptSympt2G % (freq)               Asymptomatic                                                                  8.8 ( 333)    29.1   
                                       Symptomatic                                                                  62.1 (2357)           
                                       <NA>                                                                         29.1 (1103)           
  restenos % (freq)                    missing                                                                       0.0 (   0)     4.0   
                                       de novo                                                                      87.0 (3299)           
                                       restenosis                                                                    8.8 ( 334)           
                                       stenose bij angioseal na PTCA                                                 0.2 (   7)           
                                       <NA>                                                                          4.0 ( 153)           
  stenose % (freq)                     missing                                                                       0.0 (   0)     7.0   
                                       0-49%                                                                         0.7 (  25)           
                                       50-70%                                                                        6.8 ( 257)           
                                       70-90%                                                                       35.6 (1349)           
                                       90-99%                                                                       29.9 (1133)           
                                       100% (Occlusion)                                                             14.8 ( 560)           
                                       NA                                                                            0.1 (   3)           
                                       50-99%                                                                        2.6 (  99)           
                                       70-99%                                                                        2.6 ( 100)           
                                       99                                                                            0.1 (   2)           
                                       <NA>                                                                          7.0 ( 265)           
  MedHx_CVD % (freq)                   No                                                                           34.5 (1310)     0.2   
                                       yes                                                                          65.3 (2476)           
                                       <NA>                                                                          0.2 (   7)           
  CAD_history % (freq)                 Missing                                                                       0.0 (   0)     2.0   
                                       No history CAD                                                               64.1 (2432)           
                                       History CAD                                                                  33.9 (1285)           
                                       <NA>                                                                          2.0 (  76)           
  PAOD % (freq)                        missing/no data                                                               0.0 (   0)     1.6   
                                       no                                                                           55.1 (2090)           
                                       yes                                                                          43.3 (1644)           
                                       <NA>                                                                          1.6 (  59)           
  Peripheral.interv % (freq)           no                                                                           68.0 (2581)     3.0   
                                       yes                                                                          29.0 (1099)           
                                       <NA>                                                                          3.0 ( 113)           
  EP_composite % (freq)                No data available.                                                            0.0 (   0)     7.3   
                                       No composite endpoints                                                       60.6 (2299)           
                                       Composite endpoints                                                          32.1 (1218)           
                                       <NA>                                                                          7.3 ( 276)           
  EP_composite_time (mean (SD))                                                                                    2.267 (1.203)    7.4   
  macmean0 (mean (SD))                                                                                             0.656 (1.154)   32.4   
  smcmean0 (mean (SD))                                                                                             2.292 (6.618)   32.4   
  Macrophages.bin % (freq)             no/minor                                                                     42.3 (1603)    25.7   
                                       moderate/heavy                                                               32.1 (1216)           
                                       <NA>                                                                         25.7 ( 974)           
  SMC.bin % (freq)                     no/minor                                                                     22.9 ( 870)    25.3   
                                       moderate/heavy                                                               51.8 (1964)           
                                       <NA>                                                                         25.3 ( 959)           
  neutrophils (mean (SD))                                                                                        162.985 (490.469) 91.0   
  Mast_cells_plaque (mean (SD))                                                                                  165.663 (163.421) 93.0   
  IPH.bin % (freq)                     no                                                                           32.3 (1225)    24.8   
                                       yes                                                                          42.9 (1628)           
                                       <NA>                                                                         24.8 ( 940)           
  vessel_density_averaged (mean (SD))                                                                              8.030 (6.344)   48.0   
  Calc.bin % (freq)                    no/minor                                                                     37.9 (1438)    24.7   
                                       moderate/heavy                                                               37.4 (1417)           
                                       <NA>                                                                         24.7 ( 938)           
  Collagen.bin % (freq)                no/minor                                                                     14.2 ( 540)    25.2   
                                       moderate/heavy                                                               60.6 (2299)           
                                       <NA>                                                                         25.2 ( 954)           
  Fat.bin_10 % (freq)                   <10%                                                                        32.3 (1226)    24.7   
                                        >10%                                                                        43.0 (1630)           
                                       <NA>                                                                         24.7 ( 937)           
  Fat.bin_40 % (freq)                  <40%                                                                         60.0 (2276)    24.7   
                                       >40%                                                                         15.3 ( 580)           
                                       <NA>                                                                         24.7 ( 937)           
  OverallPlaquePhenotype % (freq)      atheromatous                                                                 14.5 ( 550)    25.3   
                                       fibroatheromatous                                                            22.2 ( 843)           
                                       fibrous                                                                      37.9 (1439)           
                                       <NA>                                                                         25.3 ( 961)           
  IL6 (mean (SD))                                                                                                 94.451 (278.490) 84.5   
  IL6R_pg_ml_2015 (mean (SD))                                                                                    219.949 (252.513) 67.0   
  MCP1 (mean (SD))                                                                                               130.926 (118.422) 83.7   
  MCP1_pg_ml_2015 (mean (SD))                                                                                    587.541 (843.110) 65.3   

CEA patients

Showing the baseline table of the CEA patients in the Athero-Express Biobank.

# Create baseline tables
# http://rstudio-pubs-static.s3.amazonaws.com/13321_da314633db924dc78986a850813a50d5.html
AEDB.CEA.tableOne = print(CreateTableOne(vars = basetable_vars, 
                                         # factorVars = basetable_bin,
                                         # strata = "Symptoms.4g",
                                         data = AEDB.CEA, includeNA = TRUE), 
                          nonnormal = c(), missing = TRUE,
                          quote = FALSE, noSpaces = FALSE, showAllLevels = TRUE, explain = TRUE, 
                          format = "pf", 
                          contDigits = 3)[,1:3]
                                      
                                       level                                                                     Overall           Missing
  n                                                                                                                 2423                  
  Hospital % (freq)                    St. Antonius, Nieuwegein                                                     39.1 ( 948)     0.0   
                                       UMC Utrecht                                                                  60.9 (1475)           
  ORyear % (freq)                      No data available/missing                                                     0.0 (   0)     0.0   
                                       2002                                                                          3.3 (  81)           
                                       2003                                                                          6.5 ( 157)           
                                       2004                                                                          7.8 ( 190)           
                                       2005                                                                          7.6 ( 185)           
                                       2006                                                                          7.6 ( 183)           
                                       2007                                                                          6.3 ( 152)           
                                       2008                                                                          5.7 ( 138)           
                                       2009                                                                          7.5 ( 182)           
                                       2010                                                                          6.6 ( 159)           
                                       2011                                                                          6.8 ( 164)           
                                       2012                                                                          7.3 ( 176)           
                                       2013                                                                          6.1 ( 149)           
                                       2014                                                                          6.7 ( 163)           
                                       2015                                                                          3.1 (  76)           
                                       2016                                                                          3.5 (  85)           
                                       2017                                                                          2.7 (  65)           
                                       2018                                                                          2.7 (  66)           
                                       2019                                                                          2.1 (  52)           
  Age (mean (SD))                                                                                                 69.103 (9.302)    0.0   
  Gender % (freq)                      female                                                                       30.5 ( 739)     0.0   
                                       male                                                                         69.5 (1684)           
  TC_finalCU (mean (SD))                                                                                         184.852 (56.275)  38.0   
  LDL_finalCU (mean (SD))                                                                                        108.484 (41.794)  45.6   
  HDL_finalCU (mean (SD))                                                                                         46.432 (16.999)  41.7   
  TG_finalCU (mean (SD))                                                                                         151.189 (91.249)  42.8   
  TC_final (mean (SD))                                                                                             4.788 (1.458)   38.0   
  LDL_final (mean (SD))                                                                                            2.810 (1.082)   45.6   
  HDL_final (mean (SD))                                                                                            1.203 (0.440)   41.7   
  TG_final (mean (SD))                                                                                             1.708 (1.031)   42.8   
  hsCRP_plasma (mean (SD))                                                                                        19.887 (231.453) 52.9   
  systolic (mean (SD))                                                                                           152.408 (25.163)  11.3   
  diastoli (mean (SD))                                                                                            81.314 (25.178)  11.3   
  GFR_MDRD (mean (SD))                                                                                            73.115 (21.145)   5.4   
  BMI (mean (SD))                                                                                                 26.488 (3.976)    5.9   
  KDOQI % (freq)                       No data available/missing                                                     0.0 (   0)     5.4   
                                       Normal kidney function                                                       19.1 ( 462)           
                                       CKD 2 (Mild)                                                                 50.9 (1233)           
                                       CKD 3 (Moderate)                                                             22.9 ( 554)           
                                       CKD 4 (Severe)                                                                1.3 (  32)           
                                       CKD 5 (Failure)                                                               0.4 (  10)           
                                       <NA>                                                                          5.4 ( 132)           
  BMI_WHO % (freq)                     No data available/missing                                                     0.0 (   0)     5.9   
                                       Underweight                                                                   1.0 (  24)           
                                       Normal                                                                       35.1 ( 851)           
                                       Overweight                                                                   43.4 (1052)           
                                       Obese                                                                        14.5 ( 352)           
                                       <NA>                                                                          5.9 ( 144)           
  SmokerStatus % (freq)                Current smoker                                                               33.2 ( 805)     5.9   
                                       Ex-smoker                                                                    48.0 (1163)           
                                       Never smoked                                                                 12.9 ( 313)           
                                       <NA>                                                                          5.9 ( 142)           
  AlcoholUse % (freq)                  No                                                                           34.5 ( 835)     4.1   
                                       Yes                                                                          61.5 (1489)           
                                       <NA>                                                                          4.1 (  99)           
  DiabetesStatus % (freq)              Control (no Diabetes Dx/Med)                                                 75.2 (1822)     1.1   
                                       Diabetes                                                                     23.7 ( 574)           
                                       <NA>                                                                          1.1 (  27)           
  Hypertension.selfreport % (freq)     No data available/missing                                                     0.0 (   0)     3.2   
                                       no                                                                           24.3 ( 590)           
                                       yes                                                                          72.4 (1755)           
                                       <NA>                                                                          3.2 (  78)           
  Hypertension.selfreportdrug % (freq) No data available/missing                                                     0.0 (   0)     4.4   
                                       no                                                                           30.0 ( 726)           
                                       yes                                                                          65.6 (1590)           
                                       <NA>                                                                          4.4 ( 107)           
  Hypertension.composite % (freq)      No data available/missing                                                     0.0 (   0)     1.2   
                                       no                                                                           14.6 ( 354)           
                                       yes                                                                          84.2 (2041)           
                                       <NA>                                                                          1.2 (  28)           
  Hypertension.drugs % (freq)          No data available/missing                                                     0.0 (   0)     1.4   
                                       no                                                                           23.4 ( 566)           
                                       yes                                                                          75.3 (1824)           
                                       <NA>                                                                          1.4 (  33)           
  Med.anticoagulants % (freq)          No data available/missing                                                     0.0 (   0)     1.6   
                                       no                                                                           87.3 (2116)           
                                       yes                                                                          11.1 ( 269)           
                                       <NA>                                                                          1.6 (  38)           
  Med.all.antiplatelet % (freq)        No data available/missing                                                     0.0 (   0)     1.5   
                                       no                                                                           12.2 ( 295)           
                                       yes                                                                          86.3 (2092)           
                                       <NA>                                                                          1.5 (  36)           
  Med.Statin.LLD % (freq)              No data available/missing                                                     0.0 (   0)     1.4   
                                       no                                                                           20.3 ( 491)           
                                       yes                                                                          78.3 (1898)           
                                       <NA>                                                                          1.4 (  34)           
  Stroke_Dx % (freq)                   Missing                                                                       0.0 (   0)     6.9   
                                       No stroke diagnosed                                                          71.5 (1732)           
                                       Stroke diagnosed                                                             21.7 ( 525)           
                                       <NA>                                                                          6.9 ( 166)           
  sympt % (freq)                       missing                                                                       0.0 (   0)     0.0   
                                       Asymptomatic                                                                 11.1 ( 270)           
                                       TIA                                                                          39.7 ( 961)           
                                       minor stroke                                                                 16.8 ( 407)           
                                       Major stroke                                                                  9.9 ( 239)           
                                       Amaurosis fugax                                                              15.7 ( 380)           
                                       Four vessel disease                                                           1.6 (  38)           
                                       Vertebrobasilary TIA                                                          0.2 (   5)           
                                       Retinal infarction                                                            1.4 (  34)           
                                       Symptomatic, but aspecific symtoms                                            2.2 (  53)           
                                       Contralateral symptomatic occlusion                                           0.5 (  11)           
                                       retinal infarction                                                            0.2 (   6)           
                                       armclaudication due to occlusion subclavian artery, CEA needed for bypass     0.0 (   1)           
                                       retinal infarction + TIAs                                                     0.0 (   0)           
                                       Ocular ischemic syndrome                                                      0.7 (  16)           
                                       ischemisch glaucoom                                                           0.0 (   0)           
                                       subclavian steal syndrome                                                     0.1 (   2)           
                                       TGA                                                                           0.0 (   0)           
  Symptoms.5G % (freq)                 Asymptomatic                                                                 11.1 ( 270)     0.0   
                                       Ocular                                                                       16.3 ( 396)           
                                       Other                                                                         4.3 ( 105)           
                                       Retinal infarction                                                            1.7 (  40)           
                                       Stroke                                                                       26.7 ( 646)           
                                       TIA                                                                          39.9 ( 966)           
  AsymptSympt % (freq)                 Asymptomatic                                                                 11.1 ( 270)     0.0   
                                       Ocular and others                                                            22.3 ( 541)           
                                       Symptomatic                                                                  66.5 (1612)           
  AsymptSympt2G % (freq)               Asymptomatic                                                                 11.1 ( 270)     0.0   
                                       Symptomatic                                                                  88.9 (2153)           
  restenos % (freq)                    missing                                                                       0.0 (   0)     1.4   
                                       de novo                                                                      93.7 (2270)           
                                       restenosis                                                                    4.9 ( 118)           
                                       stenose bij angioseal na PTCA                                                 0.0 (   0)           
                                       <NA>                                                                          1.4 (  35)           
  stenose % (freq)                     missing                                                                       0.0 (   0)     2.0   
                                       0-49%                                                                         0.5 (  13)           
                                       50-70%                                                                        7.8 ( 190)           
                                       70-90%                                                                       46.5 (1127)           
                                       90-99%                                                                       38.3 ( 928)           
                                       100% (Occlusion)                                                              1.3 (  31)           
                                       NA                                                                            0.0 (   1)           
                                       50-99%                                                                        0.6 (  15)           
                                       70-99%                                                                        2.8 (  68)           
                                       99                                                                            0.1 (   2)           
                                       <NA>                                                                          2.0 (  48)           
  MedHx_CVD % (freq)                   No                                                                           36.9 ( 893)     0.0   
                                       yes                                                                          63.1 (1530)           
  CAD_history % (freq)                 Missing                                                                       0.0 (   0)     1.9   
                                       No history CAD                                                               66.9 (1620)           
                                       History CAD                                                                  31.2 ( 756)           
                                       <NA>                                                                          1.9 (  47)           
  PAOD % (freq)                        missing/no data                                                               0.0 (   0)     2.0   
                                       no                                                                           77.5 (1878)           
                                       yes                                                                          20.5 ( 497)           
                                       <NA>                                                                          2.0 (  48)           
  Peripheral.interv % (freq)           no                                                                           77.2 (1870)     2.9   
                                       yes                                                                          19.9 ( 482)           
                                       <NA>                                                                          2.9 (  71)           
  EP_composite % (freq)                No data available.                                                            0.0 (   0)     5.0   
                                       No composite endpoints                                                       70.6 (1711)           
                                       Composite endpoints                                                          24.3 ( 590)           
                                       <NA>                                                                          5.0 ( 122)           
  EP_composite_time (mean (SD))                                                                                    2.479 (1.109)    5.2   
  macmean0 (mean (SD))                                                                                             0.767 (1.183)   29.7   
  smcmean0 (mean (SD))                                                                                             1.985 (2.380)   29.9   
  Macrophages.bin % (freq)             no/minor                                                                     35.0 ( 847)    24.1   
                                       moderate/heavy                                                               40.9 ( 992)           
                                       <NA>                                                                         24.1 ( 584)           
  SMC.bin % (freq)                     no/minor                                                                     24.8 ( 602)    23.8   
                                       moderate/heavy                                                               51.3 (1244)           
                                       <NA>                                                                         23.8 ( 577)           
  neutrophils (mean (SD))                                                                                        147.151 (419.998) 87.5   
  Mast_cells_plaque (mean (SD))                                                                                  164.488 (163.771) 90.0   
  IPH.bin % (freq)                     no                                                                           30.8 ( 746)    23.5   
                                       yes                                                                          45.7 (1108)           
                                       <NA>                                                                         23.5 ( 569)           
  vessel_density_averaged (mean (SD))                                                                              8.317 (6.384)   35.1   
  Calc.bin % (freq)                    no/minor                                                                     41.6 (1007)    23.4   
                                       moderate/heavy                                                               35.1 ( 850)           
                                       <NA>                                                                         23.4 ( 566)           
  Collagen.bin % (freq)                no/minor                                                                     15.8 ( 382)    23.6   
                                       moderate/heavy                                                               60.6 (1469)           
                                       <NA>                                                                         23.6 ( 572)           
  Fat.bin_10 % (freq)                   <10%                                                                        22.4 ( 542)    23.3   
                                        >10%                                                                        54.3 (1316)           
                                       <NA>                                                                         23.3 ( 565)           
  Fat.bin_40 % (freq)                  <40%                                                                         56.2 (1362)    23.3   
                                       >40%                                                                         20.5 ( 496)           
                                       <NA>                                                                         23.3 ( 565)           
  OverallPlaquePhenotype % (freq)      atheromatous                                                                 19.8 ( 480)    23.7   
                                       fibroatheromatous                                                            27.8 ( 674)           
                                       fibrous                                                                      28.7 ( 695)           
                                       <NA>                                                                         23.7 ( 574)           
  IL6 (mean (SD))                                                                                                 98.812 (292.457) 78.2   
  IL6R_pg_ml_2015 (mean (SD))                                                                                    217.355 (248.551) 52.4   
  MCP1 (mean (SD))                                                                                               135.763 (120.028) 76.7   
  MCP1_pg_ml_2015 (mean (SD))                                                                                    600.444 (858.416) 50.5   

CEA patients with MCP1_pg_ml_2015

Showing the baseline table of the CEA patients in the Athero-Express Biobank with MCP1_pg_ml_2015.

AEDB.CEA.subset <- subset(AEDB.CEA, !is.na(MCP1_pg_ml_2015))

AEDB.CEA.subset.AsymptSympt.tableOne = print(CreateTableOne(vars = basetable_vars, 
                                         # factorVars = basetable_bin,
                                         strata = "AsymptSympt2G",
                                         data = AEDB.CEA.subset, includeNA = TRUE), 
                          nonnormal = c(), missing = TRUE,
                          quote = FALSE, noSpaces = FALSE, showAllLevels = TRUE, explain = TRUE, 
                          format = "pf", 
                          contDigits = 3)[,1:6]
                                      Stratified by AsymptSympt2G
                                       level                                                                     Asymptomatic      Symptomatic       p      test
  n                                                                                                                  131              1068                      
  Hospital % (freq)                    St. Antonius, Nieuwegein                                                     50.4 ( 66)        46.4 ( 496)     0.447     
                                       UMC Utrecht                                                                  49.6 ( 65)        53.6 ( 572)               
  ORyear % (freq)                      No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       2002                                                                         10.7 ( 14)         3.9 (  42)               
                                       2003                                                                          7.6 ( 10)         9.4 ( 100)               
                                       2004                                                                         17.6 ( 23)        11.5 ( 123)               
                                       2005                                                                          9.9 ( 13)        11.1 ( 119)               
                                       2006                                                                         10.7 ( 14)        10.2 ( 109)               
                                       2007                                                                         11.5 ( 15)        10.5 ( 112)               
                                       2008                                                                          7.6 ( 10)         7.4 (  79)               
                                       2009                                                                          7.6 ( 10)         8.4 (  90)               
                                       2010                                                                          5.3 (  7)         7.6 (  81)               
                                       2011                                                                          6.1 (  8)         9.6 ( 102)               
                                       2012                                                                          5.3 (  7)         8.3 (  89)               
                                       2013                                                                          0.0 (  0)         2.0 (  21)               
                                       2014                                                                          0.0 (  0)         0.1 (   1)               
                                       2015                                                                          0.0 (  0)         0.0 (   0)               
                                       2016                                                                          0.0 (  0)         0.0 (   0)               
                                       2017                                                                          0.0 (  0)         0.0 (   0)               
                                       2018                                                                          0.0 (  0)         0.0 (   0)               
                                       2019                                                                          0.0 (  0)         0.0 (   0)               
  Age (mean (SD))                                                                                                 66.237 (9.184)    68.940 (9.115)    0.001     
  Gender % (freq)                      female                                                                       23.7 ( 31)        31.4 ( 335)     0.088     
                                       male                                                                         76.3 (100)        68.6 ( 733)               
  TC_finalCU (mean (SD))                                                                                         175.987 (47.184)  183.526 (48.426)   0.174     
  LDL_finalCU (mean (SD))                                                                                        102.781 (38.324)  109.377 (41.109)   0.183     
  HDL_finalCU (mean (SD))                                                                                         43.701 (14.754)   45.809 (18.513)   0.318     
  TG_finalCU (mean (SD))                                                                                         157.650 (89.246)  145.194 (84.818)   0.209     
  TC_final (mean (SD))                                                                                             4.558 (1.222)     4.753 (1.254)    0.174     
  LDL_final (mean (SD))                                                                                            2.662 (0.993)     2.833 (1.065)    0.183     
  HDL_final (mean (SD))                                                                                            1.132 (0.382)     1.186 (0.479)    0.318     
  TG_final (mean (SD))                                                                                             1.781 (1.008)     1.641 (0.958)    0.209     
  hsCRP_plasma (mean (SD))                                                                                         5.688 (19.440)   16.551 (113.708)  0.380     
  systolic (mean (SD))                                                                                           153.577 (24.327)  155.790 (26.176)   0.397     
  diastoli (mean (SD))                                                                                            80.622 (13.225)   82.883 (13.573)   0.097     
  GFR_MDRD (mean (SD))                                                                                            71.026 (20.424)   71.866 (20.055)   0.658     
  BMI (mean (SD))                                                                                                 26.623 (3.391)    26.323 (3.744)    0.386     
  KDOQI % (freq)                       No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       Normal kidney function                                                       17.6 ( 23)        17.2 ( 184)               
                                       CKD 2 (Mild)                                                                 49.6 ( 65)        53.2 ( 568)               
                                       CKD 3 (Moderate)                                                             28.2 ( 37)        24.3 ( 260)               
                                       CKD 4 (Severe)                                                                0.0 (  0)         1.2 (  13)               
                                       CKD 5 (Failure)                                                               0.8 (  1)         0.4 (   4)               
                                       <NA>                                                                          3.8 (  5)         3.7 (  39)               
  BMI_WHO % (freq)                     No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       Underweight                                                                   0.8 (  1)         0.9 (  10)               
                                       Normal                                                                       32.8 ( 43)        35.6 ( 380)               
                                       Overweight                                                                   51.1 ( 67)        46.2 ( 493)               
                                       Obese                                                                        13.0 ( 17)        12.7 ( 136)               
                                       <NA>                                                                          2.3 (  3)         4.6 (  49)               
  SmokerStatus % (freq)                Current smoker                                                               30.5 ( 40)        36.2 ( 387)     0.077     
                                       Ex-smoker                                                                    57.3 ( 75)        45.6 ( 487)               
                                       Never smoked                                                                  9.9 ( 13)        14.2 ( 152)               
                                       <NA>                                                                          2.3 (  3)         3.9 (  42)               
  AlcoholUse % (freq)                  No                                                                           38.2 ( 50)        33.3 ( 356)     0.347     
                                       Yes                                                                          59.5 ( 78)        62.4 ( 666)               
                                       <NA>                                                                          2.3 (  3)         4.3 (  46)               
  DiabetesStatus % (freq)              Control (no Diabetes Dx/Med)                                                 76.3 (100)        77.3 ( 826)     0.882     
                                       Diabetes                                                                     23.7 ( 31)        22.7 ( 242)               
  Hypertension.selfreport % (freq)     No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           23.7 ( 31)        26.7 ( 285)               
                                       yes                                                                          75.6 ( 99)        71.2 ( 760)               
                                       <NA>                                                                          0.8 (  1)         2.2 (  23)               
  Hypertension.selfreportdrug % (freq) No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           30.5 ( 40)        33.0 ( 352)               
                                       yes                                                                          67.9 ( 89)        64.2 ( 686)               
                                       <NA>                                                                          1.5 (  2)         2.8 (  30)               
  Hypertension.composite % (freq)      No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                            9.9 ( 13)        14.3 ( 153)               
                                       yes                                                                          90.1 (118)        85.7 ( 915)               
  Hypertension.drugs % (freq)          No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           14.5 ( 19)        23.3 ( 249)               
                                       yes                                                                          85.5 (112)        76.5 ( 817)               
                                       <NA>                                                                          0.0 (  0)         0.2 (   2)               
  Med.anticoagulants % (freq)          No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           89.3 (117)        87.9 ( 939)               
                                       yes                                                                          10.7 ( 14)        11.9 ( 127)               
                                       <NA>                                                                          0.0 (  0)         0.2 (   2)               
  Med.all.antiplatelet % (freq)        No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                            6.1 (  8)        11.0 ( 118)               
                                       yes                                                                          93.1 (122)        88.6 ( 946)               
                                       <NA>                                                                          0.8 (  1)         0.4 (   4)               
  Med.Statin.LLD % (freq)              No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           15.3 ( 20)        22.7 ( 242)               
                                       yes                                                                          84.7 (111)        77.2 ( 824)               
                                       <NA>                                                                          0.0 (  0)         0.2 (   2)               
  Stroke_Dx % (freq)                   Missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       No stroke diagnosed                                                          80.2 (105)        75.2 ( 803)               
                                       Stroke diagnosed                                                             14.5 ( 19)        19.5 ( 208)               
                                       <NA>                                                                          5.3 (  7)         5.3 (  57)               
  sympt % (freq)                       missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       Asymptomatic                                                                100.0 (131)         0.0 (   0)               
                                       TIA                                                                           0.0 (  0)        46.3 ( 494)               
                                       minor stroke                                                                  0.0 (  0)        16.7 ( 178)               
                                       Major stroke                                                                  0.0 (  0)        12.3 ( 131)               
                                       Amaurosis fugax                                                               0.0 (  0)        17.2 ( 184)               
                                       Four vessel disease                                                           0.0 (  0)         2.2 (  23)               
                                       Vertebrobasilary TIA                                                          0.0 (  0)         0.2 (   2)               
                                       Retinal infarction                                                            0.0 (  0)         1.4 (  15)               
                                       Symptomatic, but aspecific symtoms                                            0.0 (  0)         2.7 (  29)               
                                       Contralateral symptomatic occlusion                                           0.0 (  0)         0.7 (   7)               
                                       retinal infarction                                                            0.0 (  0)         0.3 (   3)               
                                       armclaudication due to occlusion subclavian artery, CEA needed for bypass     0.0 (  0)         0.1 (   1)               
                                       retinal infarction + TIAs                                                     0.0 (  0)         0.0 (   0)               
                                       Ocular ischemic syndrome                                                      0.0 (  0)         0.1 (   1)               
                                       ischemisch glaucoom                                                           0.0 (  0)         0.0 (   0)               
                                       subclavian steal syndrome                                                     0.0 (  0)         0.0 (   0)               
                                       TGA                                                                           0.0 (  0)         0.0 (   0)               
  Symptoms.5G % (freq)                 Asymptomatic                                                                100.0 (131)         0.0 (   0)    <0.001     
                                       Ocular                                                                        0.0 (  0)        17.3 ( 185)               
                                       Other                                                                         0.0 (  0)         5.6 (  60)               
                                       Retinal infarction                                                            0.0 (  0)         1.7 (  18)               
                                       Stroke                                                                        0.0 (  0)        28.9 ( 309)               
                                       TIA                                                                           0.0 (  0)        46.4 ( 496)               
  AsymptSympt % (freq)                 Asymptomatic                                                                100.0 (131)         0.0 (   0)    <0.001     
                                       Ocular and others                                                             0.0 (  0)        24.6 ( 263)               
                                       Symptomatic                                                                   0.0 (  0)        75.4 ( 805)               
  AsymptSympt2G % (freq)               Asymptomatic                                                                100.0 (131)         0.0 (   0)    <0.001     
                                       Symptomatic                                                                   0.0 (  0)       100.0 (1068)               
  restenos % (freq)                    missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       de novo                                                                      93.9 (123)        94.8 (1012)               
                                       restenosis                                                                    2.3 (  3)         3.2 (  34)               
                                       stenose bij angioseal na PTCA                                                 0.0 (  0)         0.0 (   0)               
                                       <NA>                                                                          3.8 (  5)         2.1 (  22)               
  stenose % (freq)                     missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       0-49%                                                                         0.0 (  0)         0.6 (   6)               
                                       50-70%                                                                        3.1 (  4)         6.5 (  69)               
                                       70-90%                                                                       51.1 ( 67)        44.5 ( 475)               
                                       90-99%                                                                       41.2 ( 54)        42.7 ( 456)               
                                       100% (Occlusion)                                                              0.0 (  0)         0.9 (  10)               
                                       NA                                                                            0.0 (  0)         0.0 (   0)               
                                       50-99%                                                                        0.8 (  1)         0.5 (   5)               
                                       70-99%                                                                        0.0 (  0)         1.3 (  14)               
                                       99                                                                            0.0 (  0)         0.0 (   0)               
                                       <NA>                                                                          3.8 (  5)         3.1 (  33)               
  MedHx_CVD % (freq)                   No                                                                           38.9 ( 51)        36.9 ( 394)     0.719     
                                       yes                                                                          61.1 ( 80)        63.1 ( 674)               
  CAD_history % (freq)                 Missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       No history CAD                                                               61.8 ( 81)        69.9 ( 746)               
                                       History CAD                                                                  38.2 ( 50)        30.1 ( 322)               
  PAOD % (freq)                        missing/no data                                                               0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           74.0 ( 97)        79.6 ( 850)               
                                       yes                                                                          26.0 ( 34)        20.4 ( 218)               
  Peripheral.interv % (freq)           no                                                                           74.0 ( 97)        82.5 ( 881)     0.043     
                                       yes                                                                          26.0 ( 34)        17.2 ( 184)               
                                       <NA>                                                                          0.0 (  0)         0.3 (   3)               
  EP_composite % (freq)                No data available.                                                            0.0 (  0)         0.0 (   0)     NaN       
                                       No composite endpoints                                                       67.2 ( 88)        74.3 ( 793)               
                                       Composite endpoints                                                          32.8 ( 43)        24.9 ( 266)               
                                       <NA>                                                                          0.0 (  0)         0.8 (   9)               
  EP_composite_time (mean (SD))                                                                                    2.614 (0.931)     2.613 (1.094)    0.992     
  macmean0 (mean (SD))                                                                                             0.837 (1.088)     0.780 (1.229)    0.616     
  smcmean0 (mean (SD))                                                                                             2.152 (1.861)     1.904 (2.220)    0.223     
  Macrophages.bin % (freq)             no/minor                                                                     48.9 ( 64)        47.5 ( 507)     0.586     
                                       moderate/heavy                                                               50.4 ( 66)        50.5 ( 539)               
                                       <NA>                                                                          0.8 (  1)         2.1 (  22)               
  SMC.bin % (freq)                     no/minor                                                                     22.9 ( 30)        32.1 ( 343)     0.088     
                                       moderate/heavy                                                               75.6 ( 99)        66.0 ( 705)               
                                       <NA>                                                                          1.5 (  2)         1.9 (  20)               
  neutrophils (mean (SD))                                                                                        157.643 (507.380) 172.872 (477.038)  0.876     
  Mast_cells_plaque (mean (SD))                                                                                  111.400 (112.037) 183.284 (180.156)  0.056     
  IPH.bin % (freq)                     no                                                                           41.2 ( 54)        38.1 ( 407)     0.577     
                                       yes                                                                          58.0 ( 76)        60.1 ( 642)               
                                       <NA>                                                                          0.8 (  1)         1.8 (  19)               
  vessel_density_averaged (mean (SD))                                                                              8.608 (6.547)     8.403 (6.461)    0.744     
                                      Stratified by AsymptSympt2G
                                       Missing
  n                                           
  Hospital % (freq)                     0.0   
                                              
  ORyear % (freq)                       0.0   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  Age (mean (SD))                       0.0   
  Gender % (freq)                       0.0   
                                              
  TC_finalCU (mean (SD))               33.5   
  LDL_finalCU (mean (SD))              39.7   
  HDL_finalCU (mean (SD))              36.4   
  TG_finalCU (mean (SD))               36.1   
  TC_final (mean (SD))                 33.5   
  LDL_final (mean (SD))                39.7   
  HDL_final (mean (SD))                36.4   
  TG_final (mean (SD))                 36.1   
  hsCRP_plasma (mean (SD))             38.8   
  systolic (mean (SD))                 14.0   
  diastoli (mean (SD))                 14.0   
  GFR_MDRD (mean (SD))                  3.6   
  BMI (mean (SD))                       4.2   
  KDOQI % (freq)                        3.7   
                                              
                                              
                                              
                                              
                                              
                                              
  BMI_WHO % (freq)                      4.3   
                                              
                                              
                                              
                                              
                                              
  SmokerStatus % (freq)                 3.8   
                                              
                                              
                                              
  AlcoholUse % (freq)                   4.1   
                                              
                                              
  DiabetesStatus % (freq)               0.0   
                                              
  Hypertension.selfreport % (freq)      2.0   
                                              
                                              
                                              
  Hypertension.selfreportdrug % (freq)  2.7   
                                              
                                              
                                              
  Hypertension.composite % (freq)       0.0   
                                              
                                              
  Hypertension.drugs % (freq)           0.2   
                                              
                                              
                                              
  Med.anticoagulants % (freq)           0.2   
                                              
                                              
                                              
  Med.all.antiplatelet % (freq)         0.4   
                                              
                                              
                                              
  Med.Statin.LLD % (freq)               0.2   
                                              
                                              
                                              
  Stroke_Dx % (freq)                    5.3   
                                              
                                              
                                              
  sympt % (freq)                        0.0   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  Symptoms.5G % (freq)                  0.0   
                                              
                                              
                                              
                                              
                                              
  AsymptSympt % (freq)                  0.0   
                                              
                                              
  AsymptSympt2G % (freq)                0.0   
                                              
  restenos % (freq)                     2.3   
                                              
                                              
                                              
                                              
  stenose % (freq)                      3.2   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  MedHx_CVD % (freq)                    0.0   
                                              
  CAD_history % (freq)                  0.0   
                                              
                                              
  PAOD % (freq)                         0.0   
                                              
                                              
  Peripheral.interv % (freq)            0.3   
                                              
                                              
  EP_composite % (freq)                 0.8   
                                              
                                              
                                              
  EP_composite_time (mean (SD))         0.9   
  macmean0 (mean (SD))                  2.3   
  smcmean0 (mean (SD))                  2.7   
  Macrophages.bin % (freq)              1.9   
                                              
                                              
  SMC.bin % (freq)                      1.8   
                                              
                                              
  neutrophils (mean (SD))              82.0   
  Mast_cells_plaque (mean (SD))        86.2   
  IPH.bin % (freq)                      1.7   
                                              
                                              
  vessel_density_averaged (mean (SD))   8.7   
 [ reached getOption("max.print") -- omitted 20 rows ]

CEA patients with MCP1_pg_ml_2015 and MCP1

Showing the baseline table of the CEA patients in the Athero-Express Biobank with MCP1_pg_ml_2015 and MCP1.


AEDB.CEA.subset.combo <- subset(AEDB.CEA, !is.na(MCP1_pg_ml_2015) | !is.na(MCP1))

AEDB.CEA.subset.combo.tableOne = print(CreateTableOne(vars = basetable_vars,
                                         # factorVars = basetable_bin,
                                         strata = "AsymptSympt2G",
                                         data = AEDB.CEA.subset.combo, includeNA = TRUE),
                          nonnormal = c(), missing = TRUE,
                          quote = FALSE, noSpaces = FALSE, showAllLevels = TRUE, explain = TRUE,
                          format = "pf",
                          contDigits = 3)[,1:6]
                                      Stratified by AsymptSympt2G
                                       level                                                                     Asymptomatic      Symptomatic       p      test
  n                                                                                                                  161              1168                      
  Hospital % (freq)                    St. Antonius, Nieuwegein                                                     52.2 ( 84)        46.8 ( 547)     0.235     
                                       UMC Utrecht                                                                  47.8 ( 77)        53.2 ( 621)               
  ORyear % (freq)                      No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       2002                                                                         10.6 ( 17)         4.8 (  56)               
                                       2003                                                                         11.8 ( 19)        10.6 ( 124)               
                                       2004                                                                         19.9 ( 32)        12.2 ( 142)               
                                       2005                                                                         13.7 ( 22)        13.3 ( 155)               
                                       2006                                                                          8.7 ( 14)         9.9 ( 116)               
                                       2007                                                                          9.3 ( 15)         9.6 ( 112)               
                                       2008                                                                          6.2 ( 10)         6.8 (  79)               
                                       2009                                                                          6.2 ( 10)         7.7 (  90)               
                                       2010                                                                          4.3 (  7)         6.9 (  81)               
                                       2011                                                                          5.0 (  8)         8.7 ( 102)               
                                       2012                                                                          4.3 (  7)         7.6 (  89)               
                                       2013                                                                          0.0 (  0)         1.8 (  21)               
                                       2014                                                                          0.0 (  0)         0.1 (   1)               
                                       2015                                                                          0.0 (  0)         0.0 (   0)               
                                       2016                                                                          0.0 (  0)         0.0 (   0)               
                                       2017                                                                          0.0 (  0)         0.0 (   0)               
                                       2018                                                                          0.0 (  0)         0.0 (   0)               
                                       2019                                                                          0.0 (  0)         0.0 (   0)               
  Age (mean (SD))                                                                                                 65.901 (9.051)    68.788 (9.077)   <0.001     
  Gender % (freq)                      female                                                                       23.0 ( 37)        30.4 ( 355)     0.066     
                                       male                                                                         77.0 (124)        69.6 ( 813)               
  TC_finalCU (mean (SD))                                                                                         179.199 (45.274)  184.078 (48.333)   0.322     
  LDL_finalCU (mean (SD))                                                                                        104.132 (37.590)  109.761 (41.318)   0.206     
  HDL_finalCU (mean (SD))                                                                                         44.749 (14.890)   45.803 (18.219)   0.570     
  TG_finalCU (mean (SD))                                                                                         158.699 (87.584)  145.901 (83.176)   0.141     
  TC_final (mean (SD))                                                                                             4.641 (1.173)     4.768 (1.252)    0.322     
  LDL_final (mean (SD))                                                                                            2.697 (0.974)     2.843 (1.070)    0.206     
  HDL_final (mean (SD))                                                                                            1.159 (0.386)     1.186 (0.472)    0.570     
  TG_final (mean (SD))                                                                                             1.793 (0.990)     1.649 (0.940)    0.141     
  hsCRP_plasma (mean (SD))                                                                                         6.846 (21.838)   16.179 (110.739)  0.394     
  systolic (mean (SD))                                                                                           152.838 (24.600)  155.713 (26.406)   0.230     
  diastoli (mean (SD))                                                                                            80.824 (12.855)   82.863 (13.542)   0.097     
  GFR_MDRD (mean (SD))                                                                                            70.440 (19.793)   71.890 (20.127)   0.400     
  BMI (mean (SD))                                                                                                 26.626 (3.572)    26.352 (3.765)    0.392     
  KDOQI % (freq)                       No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       Normal kidney function                                                       14.9 ( 24)        17.4 ( 203)               
                                       CKD 2 (Mild)                                                                 50.9 ( 82)        53.3 ( 623)               
                                       CKD 3 (Moderate)                                                             29.8 ( 48)        24.0 ( 280)               
                                       CKD 4 (Severe)                                                                0.0 (  0)         1.3 (  15)               
                                       CKD 5 (Failure)                                                               0.6 (  1)         0.4 (   5)               
                                       <NA>                                                                          3.7 (  6)         3.6 (  42)               
  BMI_WHO % (freq)                     No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       Underweight                                                                   1.2 (  2)         0.9 (  11)               
                                       Normal                                                                       32.3 ( 52)        35.5 ( 415)               
                                       Overweight                                                                   49.7 ( 80)        45.6 ( 533)               
                                       Obese                                                                        13.7 ( 22)        13.1 ( 153)               
                                       <NA>                                                                          3.1 (  5)         4.8 (  56)               
  SmokerStatus % (freq)                Current smoker                                                               29.2 ( 47)        36.0 ( 421)     0.070     
                                       Ex-smoker                                                                    56.5 ( 91)        45.6 ( 533)               
                                       Never smoked                                                                 11.8 ( 19)        14.1 ( 165)               
                                       <NA>                                                                          2.5 (  4)         4.2 (  49)               
  AlcoholUse % (freq)                  No                                                                           38.5 ( 62)        33.6 ( 393)     0.213     
                                       Yes                                                                          59.6 ( 96)        62.2 ( 726)               
                                       <NA>                                                                          1.9 (  3)         4.2 (  49)               
  DiabetesStatus % (freq)              Control (no Diabetes Dx/Med)                                                 78.3 (126)        77.2 ( 902)     0.846     
                                       Diabetes                                                                     21.7 ( 35)        22.8 ( 266)               
  Hypertension.selfreport % (freq)     No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           25.5 ( 41)        26.6 ( 311)               
                                       yes                                                                          73.9 (119)        71.3 ( 833)               
                                       <NA>                                                                          0.6 (  1)         2.1 (  24)               
  Hypertension.selfreportdrug % (freq) No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           32.3 ( 52)        33.0 ( 385)               
                                       yes                                                                          66.5 (107)        64.5 ( 753)               
                                       <NA>                                                                          1.2 (  2)         2.6 (  30)               
  Hypertension.composite % (freq)      No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           11.2 ( 18)        14.1 ( 165)               
                                       yes                                                                          88.8 (143)        85.9 (1003)               
  Hypertension.drugs % (freq)          No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           15.5 ( 25)        22.8 ( 266)               
                                       yes                                                                          83.9 (135)        77.1 ( 900)               
                                       <NA>                                                                          0.6 (  1)         0.2 (   2)               
  Med.anticoagulants % (freq)          No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           89.4 (144)        87.9 (1027)               
                                       yes                                                                           9.9 ( 16)        11.9 ( 139)               
                                       <NA>                                                                          0.6 (  1)         0.2 (   2)               
  Med.all.antiplatelet % (freq)        No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                            6.2 ( 10)        10.9 ( 127)               
                                       yes                                                                          92.5 (149)        88.8 (1037)               
                                       <NA>                                                                          1.2 (  2)         0.3 (   4)               
  Med.Statin.LLD % (freq)              No data available/missing                                                     0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           17.4 ( 28)        23.1 ( 270)               
                                       yes                                                                          82.0 (132)        76.7 ( 896)               
                                       <NA>                                                                          0.6 (  1)         0.2 (   2)               
  Stroke_Dx % (freq)                   Missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       No stroke diagnosed                                                          80.1 (129)        75.5 ( 882)               
                                       Stroke diagnosed                                                             13.7 ( 22)        19.1 ( 223)               
                                       <NA>                                                                          6.2 ( 10)         5.4 (  63)               
  sympt % (freq)                       missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       Asymptomatic                                                                100.0 (161)         0.0 (   0)               
                                       TIA                                                                           0.0 (  0)        46.5 ( 543)               
                                       minor stroke                                                                  0.0 (  0)        17.1 ( 200)               
                                       Major stroke                                                                  0.0 (  0)        11.6 ( 136)               
                                       Amaurosis fugax                                                               0.0 (  0)        17.0 ( 198)               
                                       Four vessel disease                                                           0.0 (  0)         2.1 (  25)               
                                       Vertebrobasilary TIA                                                          0.0 (  0)         0.2 (   2)               
                                       Retinal infarction                                                            0.0 (  0)         1.4 (  16)               
                                       Symptomatic, but aspecific symtoms                                            0.0 (  0)         3.1 (  36)               
                                       Contralateral symptomatic occlusion                                           0.0 (  0)         0.6 (   7)               
                                       retinal infarction                                                            0.0 (  0)         0.3 (   3)               
                                       armclaudication due to occlusion subclavian artery, CEA needed for bypass     0.0 (  0)         0.1 (   1)               
                                       retinal infarction + TIAs                                                     0.0 (  0)         0.0 (   0)               
                                       Ocular ischemic syndrome                                                      0.0 (  0)         0.1 (   1)               
                                       ischemisch glaucoom                                                           0.0 (  0)         0.0 (   0)               
                                       subclavian steal syndrome                                                     0.0 (  0)         0.0 (   0)               
                                       TGA                                                                           0.0 (  0)         0.0 (   0)               
  Symptoms.5G % (freq)                 Asymptomatic                                                                100.0 (161)         0.0 (   0)    <0.001     
                                       Ocular                                                                        0.0 (  0)        17.0 ( 199)               
                                       Other                                                                         0.0 (  0)         5.9 (  69)               
                                       Retinal infarction                                                            0.0 (  0)         1.6 (  19)               
                                       Stroke                                                                        0.0 (  0)        28.8 ( 336)               
                                       TIA                                                                           0.0 (  0)        46.7 ( 545)               
  AsymptSympt % (freq)                 Asymptomatic                                                                100.0 (161)         0.0 (   0)    <0.001     
                                       Ocular and others                                                             0.0 (  0)        24.6 ( 287)               
                                       Symptomatic                                                                   0.0 (  0)        75.4 ( 881)               
  AsymptSympt2G % (freq)               Asymptomatic                                                                100.0 (161)         0.0 (   0)    <0.001     
                                       Symptomatic                                                                   0.0 (  0)       100.0 (1168)               
  restenos % (freq)                    missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       de novo                                                                      93.2 (150)        95.0 (1110)               
                                       restenosis                                                                    3.7 (  6)         3.1 (  36)               
                                       stenose bij angioseal na PTCA                                                 0.0 (  0)         0.0 (   0)               
                                       <NA>                                                                          3.1 (  5)         1.9 (  22)               
  stenose % (freq)                     missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       0-49%                                                                         0.0 (  0)         0.6 (   7)               
                                       50-70%                                                                        2.5 (  4)         6.2 (  73)               
                                       70-90%                                                                       50.9 ( 82)        44.5 ( 520)               
                                       90-99%                                                                       42.9 ( 69)        43.2 ( 505)               
                                       100% (Occlusion)                                                              0.0 (  0)         0.9 (  11)               
                                       NA                                                                            0.0 (  0)         0.0 (   0)               
                                       50-99%                                                                        0.6 (  1)         0.4 (   5)               
                                       70-99%                                                                        0.0 (  0)         1.2 (  14)               
                                       99                                                                            0.0 (  0)         0.0 (   0)               
                                       <NA>                                                                          3.1 (  5)         2.8 (  33)               
  MedHx_CVD % (freq)                   No                                                                           37.3 ( 60)        36.7 ( 429)     0.964     
                                       yes                                                                          62.7 (101)        63.3 ( 739)               
  CAD_history % (freq)                 Missing                                                                       0.0 (  0)         0.0 (   0)     NaN       
                                       No history CAD                                                               59.0 ( 95)        69.1 ( 807)               
                                       History CAD                                                                  41.0 ( 66)        30.9 ( 361)               
  PAOD % (freq)                        missing/no data                                                               0.0 (  0)         0.0 (   0)     NaN       
                                       no                                                                           73.9 (119)        79.9 ( 933)               
                                       yes                                                                          26.1 ( 42)        20.1 ( 235)               
  Peripheral.interv % (freq)           no                                                                           72.7 (117)        83.0 ( 969)     0.004     
                                       yes                                                                          27.3 ( 44)        16.8 ( 196)               
                                       <NA>                                                                          0.0 (  0)         0.3 (   3)               
  EP_composite % (freq)                No data available.                                                            0.0 (  0)         0.0 (   0)     NaN       
                                       No composite endpoints                                                       68.3 (110)        73.8 ( 862)               
                                       Composite endpoints                                                          31.7 ( 51)        25.3 ( 295)               
                                       <NA>                                                                          0.0 (  0)         0.9 (  11)               
  EP_composite_time (mean (SD))                                                                                    2.579 (0.961)     2.611 (1.129)    0.735     
  macmean0 (mean (SD))                                                                                             0.802 (1.072)     0.821 (1.274)    0.864     
  smcmean0 (mean (SD))                                                                                             2.445 (2.594)     1.924 (2.232)    0.007     
  Macrophages.bin % (freq)             no/minor                                                                     50.3 ( 81)        45.8 ( 535)     0.314     
                                       moderate/heavy                                                               49.1 ( 79)        52.2 ( 610)               
                                       <NA>                                                                          0.6 (  1)         2.0 (  23)               
  SMC.bin % (freq)                     no/minor                                                                     21.7 ( 35)        32.4 ( 379)     0.018     
                                       moderate/heavy                                                               77.0 (124)        65.8 ( 769)               
                                       <NA>                                                                          1.2 (  2)         1.7 (  20)               
  neutrophils (mean (SD))                                                                                        133.447 (437.032) 158.140 (448.512)  0.754     
  Mast_cells_plaque (mean (SD))                                                                                  123.389 (135.924) 173.244 (168.601)  0.097     
  IPH.bin % (freq)                     no                                                                           39.1 ( 63)        36.5 ( 426)     0.526     
                                       yes                                                                          60.2 ( 97)        61.9 ( 723)               
                                       <NA>                                                                          0.6 (  1)         1.6 (  19)               
  vessel_density_averaged (mean (SD))                                                                              8.837 (6.727)     8.434 (6.386)    0.474     
                                      Stratified by AsymptSympt2G
                                       Missing
  n                                           
  Hospital % (freq)                     0.0   
                                              
  ORyear % (freq)                       0.0   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  Age (mean (SD))                       0.0   
  Gender % (freq)                       0.0   
                                              
  TC_finalCU (mean (SD))               32.8   
  LDL_finalCU (mean (SD))              39.9   
  HDL_finalCU (mean (SD))              36.2   
  TG_finalCU (mean (SD))               35.7   
  TC_final (mean (SD))                 32.8   
  LDL_final (mean (SD))                39.9   
  HDL_final (mean (SD))                36.2   
  TG_final (mean (SD))                 35.7   
  hsCRP_plasma (mean (SD))             40.6   
  systolic (mean (SD))                 13.5   
  diastoli (mean (SD))                 13.5   
  GFR_MDRD (mean (SD))                  3.5   
  BMI (mean (SD))                       4.4   
  KDOQI % (freq)                        3.6   
                                              
                                              
                                              
                                              
                                              
                                              
  BMI_WHO % (freq)                      4.6   
                                              
                                              
                                              
                                              
                                              
  SmokerStatus % (freq)                 4.0   
                                              
                                              
                                              
  AlcoholUse % (freq)                   3.9   
                                              
                                              
  DiabetesStatus % (freq)               0.0   
                                              
  Hypertension.selfreport % (freq)      1.9   
                                              
                                              
                                              
  Hypertension.selfreportdrug % (freq)  2.4   
                                              
                                              
                                              
  Hypertension.composite % (freq)       0.0   
                                              
                                              
  Hypertension.drugs % (freq)           0.2   
                                              
                                              
                                              
  Med.anticoagulants % (freq)           0.2   
                                              
                                              
                                              
  Med.all.antiplatelet % (freq)         0.5   
                                              
                                              
                                              
  Med.Statin.LLD % (freq)               0.2   
                                              
                                              
                                              
  Stroke_Dx % (freq)                    5.5   
                                              
                                              
                                              
  sympt % (freq)                        0.0   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  Symptoms.5G % (freq)                  0.0   
                                              
                                              
                                              
                                              
                                              
  AsymptSympt % (freq)                  0.0   
                                              
                                              
  AsymptSympt2G % (freq)                0.0   
                                              
  restenos % (freq)                     2.0   
                                              
                                              
                                              
                                              
  stenose % (freq)                      2.9   
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
  MedHx_CVD % (freq)                    0.0   
                                              
  CAD_history % (freq)                  0.0   
                                              
                                              
  PAOD % (freq)                         0.0   
                                              
                                              
  Peripheral.interv % (freq)            0.2   
                                              
                                              
  EP_composite % (freq)                 0.8   
                                              
                                              
                                              
  EP_composite_time (mean (SD))         1.0   
  macmean0 (mean (SD))                  2.2   
  smcmean0 (mean (SD))                  2.5   
  Macrophages.bin % (freq)              1.8   
                                              
                                              
  SMC.bin % (freq)                      1.7   
                                              
                                              
  neutrophils (mean (SD))              81.0   
  Mast_cells_plaque (mean (SD))        83.7   
  IPH.bin % (freq)                      1.5   
                                              
                                              
  vessel_density_averaged (mean (SD))   8.0   
 [ reached getOption("max.print") -- omitted 20 rows ]

Writing the baseline table to Excel format.

# Write basetable
require(openxlsx)

write.xlsx(file = paste0(BASELINE_loc, "/",Today,".",PROJECTNAME,".AE.BaselineTable.wholeCEA.xlsx"),
           AEDB.CEA.tableOne, 
           row.names = TRUE, 
           col.names = TRUE, 
           sheetName = "wholeAEDB_Baseline")

write.xlsx(file = paste0(BASELINE_loc, "/",Today,".",PROJECTNAME,".AE.BaselineTable.wholeCEA.AsymptSympt.xlsx"),
           AEDB.CEA.subset.AsymptSympt.tableOne, 
           row.names = TRUE, 
           col.names = TRUE, 
           sheetName = "wholeAEDB_Baseline_Sympt")

write.xlsx(file = paste0(BASELINE_loc, "/",Today,".",PROJECTNAME,".AE.BaselineTable.subsetCEA.xlsx"),
           AEDB.CEA.subset.combo.tableOne,
           row.names = TRUE,
           col.names = TRUE,
           sheetName = "subsetAEDB_Baseline")

Data exploration

Here we inspect the data and when necessary transform quantitative measures. We will inspect the raw, and inverse-rank normal transformation (standardise). We know that the proteins are not normally distributed and therefore we will standardise them as follows:

z = ( x - μ ) / σ

Where for each sample, x equals the value of the variable, μ (mu) equals the mean of x, and σ (sigma) equals the standard deviation of x.

MCP1 plaque levels: experiment 2

We will explore the plaque levels. As noted above, we will use MCP1_pg_ml_2015, this was experiment 2 in 2015 on the LUMINEX-platform and measurements are in pg/mL.


summary(AEDB.CEA$MCP1_pg_ml_2015)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
    0.66   101.34   298.76   600.44   770.98 10181.08     1224 
do.call(rbind , by(AEDB.CEA$MCP1_pg_ml_2015, AEDB.CEA$AsymptSympt2G, summary))
             Min.  1st Qu.  Median     Mean  3rd Qu.     Max. NA's
Asymptomatic 9.36  71.1650 152.220 405.1822 537.9100  2669.59  139
Symptomatic  0.66 114.9425 314.625 624.3948 792.4225 10181.08 1085
library(patchwork)

Attaching package: ‘patchwork’

The following object is masked from ‘package:MASS’:

    area
p1 <- ggpubr::gghistogram(AEDB.CEA, "MCP1_pg_ml_2015", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    # add = "mean", 
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2), 
                    title = "MCP1 plaque levels",
                    xlab = "pg/ug", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.
AEDB.CEA$MCP1_pg_ml_2015_rank <- qnorm((rank(AEDB.CEA$MCP1_pg_ml_2015, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$MCP1_pg_ml_2015)))
p3 <- ggpubr::gghistogram(AEDB.CEA, "MCP1_pg_ml_2015_rank",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"),
                    add = "mean",
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2),
                    title = "MCP1 plaque levels",
                    xlab = "inverse-normal transformation pg/mL",
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.
p1 

p3

# ggpar(p1, legend = "") / ggpar(p2, legend = "")  | ggpar(p3, legend = "right")

rm(p1, p3)

MCP1 plaque levels: experiment 1

We will explore the plaque levels. As noted above, we will use MCP1, this was experiment 1 on the LUMINEX-platform and measurements are in pg/mL.


# summary(AEDB.CEA$MCP1)
# 
# do.call(rbind , by(AEDB.CEA$MCP1, AEDB.CEA$AsymptSympt2G, summary))
# 
attach(AEDB.CEA)
AEDB.CEA$MCP1[MCP1 == 0] <- NA
detach(AEDB.CEA)

summary(AEDB.CEA$MCP1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  3.865  58.057 103.811 137.960 180.297 926.273    1867 
do.call(rbind , by(AEDB.CEA$MCP1, AEDB.CEA$AsymptSympt2G, summary))
                  Min.  1st Qu.    Median     Mean  3rd Qu.     Max. NA's
Asymptomatic 15.578813 45.31926  77.84731 119.4878 126.1851 846.5306  184
Symptomatic   3.864774 60.54905 111.87004 141.3406 186.4375 926.2729 1683
p1 <- ggpubr::gghistogram(AEDB.CEA, "MCP1", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    # add = "mean", 
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2), 
                    title = "MCP1 plaque levels",
                    xlab = "pg/mL", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.
AEDB.CEA$MCP1_rank <- qnorm((rank(AEDB.CEA$MCP1, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$MCP1)))
p3 <- ggpubr::gghistogram(AEDB.CEA, "MCP1_rank",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"),
                    add = "mean",
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2),
                    title = "MCP1 plaque levels",
                    xlab = "inverse-normal transformation pg/mL",
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.
p1 

p3

# ggpar(p1, legend = "") / ggpar(p2, legend = "")  | ggpar(p3, legend = "right")

rm(p1, p3)

Correlations between MCP1 plaque levels and transformations

Here we compare the MCP1 plaque levels from experiment 1 with those experiment 2.

p1 <- ggpubr::ggscatter(AEDB.CEA, 
                        x = "MCP1_rank", 
                        y = "MCP1_pg_ml_2015_rank",
                        color = "#1290D9",
                        # fill = "Gender",
                        # palette = c("#1290D9", "#DB003F"),
                        add = "reg.line",
                        add.params =  list(color = "black", linetype = 2),
                        cor.coef = TRUE, cor.method = "spearman",
                        xlab = "experiment 1",
                        ylab = "experiment 2",
                        title = "MCP1 plaque levels, INT, [pg/mL]",
                        ggtheme = theme_minimal())

p1 

Preliminary conclusion data exploration

Based on the inverse-rank normal transformation we conclude there are no outliers and the data approximates a normal distribution. We will apply inverse-rank normal transformation on all proteins and focus the analysis on MCP1 in plaque.

Analyses

The analyses are focused on three elements:

  1. plaque vulnerability phenotypes
  2. clinical status at inclusion (symptoms)
  3. secondary clinical outcome during three (3) years of follow-up

Covariates & other variables

  1. Age (continuous in 1-year increment). [Age]
  2. Sex (male vs. female). [Gender]
  3. Presence of hypertension at baseline (defined either as history of hypertension, SBP ≥140 mm Hg, DBP ≥90 mm Hg, or prescription of antihypertensive medications). [Hypertension.composite]
  4. Presence of diabetes mellitus at baseline (defined either as a history of diabetes and/or administration of glucose lowering medication). [DiabetesStatus]
  5. Smoking (current, ex-, never). [SmokerStatus]
  6. LDL-C levels (continuous). [LDL_final]
  7. Use of lipid-lowering drugs. [Med.Statin.LLD]
  8. Use of antiplatelet drugs. [Med.all.antiplatelet]
  9. eGFR (continuous). [GFR_MDRD]
  10. BMI (continuous). [BMI]
  11. History of cardiovascular disease (stroke, coronary artery disease, peripheral artery disease). [MedHx_CVD] combination of [CAD_history, Stroke_history, Peripheral.interv]
  12. Level of stenosis (50-70% vs. 70-99%). [stenose]
  13. Year of surgery [ORdate_year] as we discovered in Van Lammeren et al. the composition of the plaque and therefore the Athero-Express Biobank Study has changed over the years. Likely through changes in lifestyle and primary prevention regimes.

Models

We will analyze the data through four different models

  • Model 1: adjusted for age, sex, and year of surgery
  • Model 2: adjusted for age, sex, year of surgery, and additionally adjusted for history hypertension (defined from medical history and/or use of antihypertensive medications), diabetes (defined as history of a diagnosis and/or use of glucose-lowering medications), current smoking, LDL-C levels at time of operation, use of statins, use of antiplatelet agents, eGFR, BMI, history of cardiovascular disease (coronary artery disease, stroke, peripheral artery disease), and level of stenosis (50-70%, 70-90%, 90-99%)

A. Cross-sectional analysis plaque phenotypes

In the cross-sectional analysis of plaque MCP1 levels we will focus on the following plaque vulnerability phenotypes:

  • Percentage of macrophages (continuous trait)
  • Percentage of SMCs (continuous trait)
  • Number of intraplaque microvessels per 3-4 hotspots (continuous trait)
  • Presence of moderate/heavy calcifications (binary trait)
  • Presence of moderate/heavy collagen content (binary trait)
  • Presence of lipid core no/<10% vs. >10% (binary trait)
  • Presence of intraplaque hemorrhage (binary trait)

Continous traits

We inspect the plaque characteristics, and inverse-rank normal transformation continuous phenotypes.


# macrophages
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$macmean0)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 0.0000  0.0733  0.3133  0.7671  0.9967 15.1000     720 
min_macmean <- min(AEDB.CEA$macmean0, na.rm = TRUE)
cat(paste0("\nMinimum value % macrophages: ",min_macmean,".\n"))

Minimum value % macrophages: 0.
AEDB.CEA$Macrophages_LN <- log(AEDB.CEA$macmean0 + min_macmean)

ggpubr::gghistogram(AEDB.CEA, "Macrophages_LN", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "% macrophages",
                    xlab = "natural log-transformed %", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

AEDB.CEA$Macrophages_rank <- qnorm((rank(AEDB.CEA$macmean0, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$macmean0)))
ggpubr::gghistogram(AEDB.CEA, "Macrophages_rank", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "% macrophages",
                    xlab = "inverse-rank normalized %", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

# smooth muscle cells
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$macmean0)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 0.0000  0.0733  0.3133  0.7671  0.9967 15.1000     720 
min_smcmean <- min(AEDB.CEA$smcmean0, na.rm = TRUE)
cat(paste0("\nMinimum value % smooth muscle cells: ",min_smcmean,".\n"))

Minimum value % smooth muscle cells: 0.
AEDB.CEA$SMC_LN <- log(AEDB.CEA$smcmean0 + min_smcmean)

ggpubr::gghistogram(AEDB.CEA, "SMC_LN", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "% smooth muscle cells",
                    xlab = "natural log-transformed %", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

AEDB.CEA$SMC_rank <- qnorm((rank(AEDB.CEA$smcmean0, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$smcmean0)))
ggpubr::gghistogram(AEDB.CEA, "SMC_rank", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "% smooth muscle cells",
                    xlab = "inverse-rank normalized %", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

# vessel density
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$vessel_density_averaged)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   4.000   7.000   8.318  11.300  48.000     850 
min_vesseldensity <- min(AEDB.CEA$vessel_density_averaged, na.rm = TRUE)
min_vesseldensity
[1] 0
cat(paste0("\nMinimum value number of intraplaque neovessels per 3-4 hotspots: ",min_vesseldensity,".\n"))

Minimum value number of intraplaque neovessels per 3-4 hotspots: 0.
AEDB.CEA$VesselDensity_LN <- log(AEDB.CEA$vessel_density_averaged + min_vesseldensity)

ggpubr::gghistogram(AEDB.CEA, "VesselDensity_LN", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "number of intraplaque neovessels per 3-4 hotspots",
                    xlab = "natural log-transformed number", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

AEDB.CEA$VesselDensity_rank <- qnorm((rank(AEDB.CEA$vessel_density_averaged, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$vessel_density_averaged)))
ggpubr::gghistogram(AEDB.CEA, "VesselDensity_rank", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "number of intraplaque neovessels per 3-4 hotspots",
                   xlab = "inverse-rank normalized number", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

Given their strong correlation, we also introduce a macrophages/smooth muscle cell ratio. This is a proxy of the extend to which a plaque is inflammed (‘unstable’) as compared to ‘stable’.


AEDB.CEA$MAC_SMC_ratio <- AEDB.CEA$macmean0 / AEDB.CEA$smcmean0

AEDB.CEA$MAC_SMC_ratio_rank  <- qnorm((rank(AEDB.CEA$MAC_SMC_ratio, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$MAC_SMC_ratio)))


cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$Macrophages_rank)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-2.3161 -0.6703  0.0000  0.0020  0.6745  3.4375     720 
summary(AEDB.CEA$SMC_rank)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-2.6939 -0.6736  0.0015  0.0006  0.6740  3.4368     724 
summary(AEDB.CEA$MAC_SMC_ratio_rank)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-2.3364 -0.6740  0.0000  0.0013  0.6740  2.7533     728 
ggpubr::gghistogram(AEDB.CEA, "MAC_SMC_ratio_rank", 
                    # y = "..count..", 
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"), 
                    add = "median", 
                    #add_density = TRUE,
                    rug = TRUE,
                    #add.params =  list(color = "black", linetype = 2), 
                    title = "macrophages/smooth muscle cells ratio",
                    xlab = "inverse-rank normalized", 
                    ggtheme = theme_minimal())
Using `bins = 30` by default. Pick better value with the argument `bins`.

Binary traits


# calcification
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$Calc.bin)
      no/minor moderate/heavy           NA's 
          1007            850            566 
contrasts(AEDB.CEA$Calc.bin)
               moderate/heavy
no/minor                    0
moderate/heavy              1
AEDB.CEA$CalcificationPlaque <- as.factor(AEDB.CEA$Calc.bin)

df <- AEDB.CEA %>%
  filter(!is.na(CalcificationPlaque)) %>%
  group_by(Gender, CalcificationPlaque) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "CalcificationPlaque", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Calcification",
                    xlab = "calcification", 
                    ggtheme = theme_minimal())

rm(df)

# collagen
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$Collagen.bin)
      no/minor moderate/heavy           NA's 
           382           1469            572 
contrasts(AEDB.CEA$Collagen.bin)
               moderate/heavy
no/minor                    0
moderate/heavy              1
AEDB.CEA$CollagenPlaque <- as.factor(AEDB.CEA$Collagen.bin)

df <- AEDB.CEA %>%
  filter(!is.na(CollagenPlaque)) %>%
  group_by(Gender, CollagenPlaque) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "CollagenPlaque", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Collagen",
                    xlab = "collagen", 
                    ggtheme = theme_minimal())

rm(df)

# fat 10%
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$Fat.bin_10)
 <10%  >10%  NA's 
  542  1316   565 
contrasts(AEDB.CEA$Fat.bin_10)
       >10%
 <10%     0
 >10%     1
AEDB.CEA$Fat10Perc <- as.factor(AEDB.CEA$Fat.bin_10)

df <- AEDB.CEA %>%
  filter(!is.na(Fat10Perc)) %>%
  group_by(Gender, Fat10Perc) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "Fat10Perc", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Intraplaque fat",
                    xlab = "intraplaque fat", 
                    ggtheme = theme_minimal())

rm(df)

# macrophages binned
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$Macrophages.bin)
      no/minor moderate/heavy           NA's 
           847            992            584 
contrasts(AEDB.CEA$Macrophages.bin)
               moderate/heavy
no/minor                    0
moderate/heavy              1
AEDB.CEA$MAC_binned <- as.factor(AEDB.CEA$Macrophages.bin)

df <- AEDB.CEA %>%
  filter(!is.na(MAC_binned)) %>%
  group_by(Gender, MAC_binned) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "MAC_binned", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Macrophages (binned)",
                    xlab = "Macrophages", 
                    ggtheme = theme_minimal())

rm(df)

# macrophages grouped
cat("Summary of data.\n")
Summary of data.
AEDB.CEA$macrophages <- as.factor(AEDB.CEA$macrophages)
summary(AEDB.CEA$macrophages)
-888    0    1    2    3 NA's 
   6  173  674  786  206  578 
contrasts(AEDB.CEA$macrophages)
     0 1 2 3
-888 0 0 0 0
0    1 0 0 0
1    0 1 0 0
2    0 0 1 0
3    0 0 0 1
AEDB.CEA$MAC_grouped <- as.factor(AEDB.CEA$macrophages)

df <- AEDB.CEA %>%
  filter(!is.na(MAC_grouped)) %>%
  group_by(Gender, MAC_grouped) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "MAC_grouped", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Macrophages (grouped)",
                    xlab = "Macrophages", 
                    ggtheme = theme_minimal())

rm(df)

# SMC binned
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$SMC.bin)
      no/minor moderate/heavy           NA's 
           602           1244            577 
contrasts(AEDB.CEA$SMC.bin)
               moderate/heavy
no/minor                    0
moderate/heavy              1
AEDB.CEA$SMC_binned <- as.factor(AEDB.CEA$SMC.bin)

df <- AEDB.CEA %>%
  filter(!is.na(SMC_binned)) %>%
  group_by(Gender, SMC_binned) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "SMC_binned", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "SMC (binned)",
                    xlab = "SMC", 
                    ggtheme = theme_minimal())

rm(df)

# SMC grouped
cat("Summary of data.\n")
Summary of data.
AEDB.CEA$smc <- as.factor(AEDB.CEA$smc)
summary(AEDB.CEA$smc)
-888    0    1    2    3 NA's 
   4   44  558  908  336  573 
contrasts(AEDB.CEA$smc)
     0 1 2 3
-888 0 0 0 0
0    1 0 0 0
1    0 1 0 0
2    0 0 1 0
3    0 0 0 1
AEDB.CEA$SMC_grouped <- as.factor(AEDB.CEA$smc)

df <- AEDB.CEA %>%
  filter(!is.na(SMC_grouped)) %>%
  group_by(Gender, SMC_grouped) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "SMC_grouped", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "SMC (grouped)",
                    xlab = "SMC", 
                    ggtheme = theme_minimal())

rm(df)


# IPH
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$IPH.bin)
  no  yes NA's 
 746 1108  569 
contrasts(AEDB.CEA$IPH.bin)
    yes
no    0
yes   1
AEDB.CEA$IPH <- as.factor(AEDB.CEA$IPH.bin)

df <- AEDB.CEA %>%
  filter(!is.na(IPH)) %>%
  group_by(Gender, IPH) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "IPH", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Intraplaque hemorrhage",
                    xlab = "intraplaque hemorrhage", 
                    ggtheme = theme_minimal())

rm(df)

# Symptoms
cat("Summary of data.\n")
Summary of data.
summary(AEDB.CEA$AsymptSympt)
     Asymptomatic Ocular and others       Symptomatic 
              270               541              1612 
contrasts(AEDB.CEA$AsymptSympt)
                  Ocular and others Symptomatic
Asymptomatic                      0           0
Ocular and others                 1           0
Symptomatic                       0           1
AEDB.CEA$AsymptSympt <- as.factor(AEDB.CEA$AsymptSympt)

df <- AEDB.CEA %>%
  filter(!is.na(AsymptSympt)) %>%
  group_by(Gender, AsymptSympt) %>%
summarise(counts = n()) 

ggpubr::ggbarplot(df, x = "AsymptSympt", y = "counts",
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#DB003F", "#1290D9"),
                    label = TRUE, lab.vjust = 2, lab.col = "#FFFFFF",
                    title = "Symptoms",
                    xlab = "symptoms", 
                    ggtheme = theme_minimal())

rm(df)

Correlations between MCP1 plaque levels and surgery year

Here we compare the MCP1 plaque levels from experiment 1 with those experiment 2. The latter we measured in pg/mL and also corrected for the total protein content (pg/ug).

p1 <- ggpubr::ggscatter(AEDB.CEA, 
                        x = "ORyear", 
                        y = "MCP1_rank",
                        color = "#1290D9",
                        # fill = "Gender",
                        # palette = c("#1290D9", "#DB003F"),
                        add = "reg.line",
                        add.params =  list(color = "black", linetype = 2),
                        cor.coef = TRUE, cor.method = "spearman",
                        xlab = "year of surgery",
                        ylab = "experiment 1",
                        title = "MCP1 plaque levels, INT, [pg/mL]",
                        ggtheme = theme_minimal())

p1 


p2 <- ggpubr::ggscatter(AEDB.CEA, 
                        x = "ORyear", 
                        y = "MCP1_pg_ml_2015_rank",
                        color = "#1290D9",
                        # fill = "Gender",
                        # palette = c("#1290D9", "#DB003F"),
                        add = "reg.line",
                        add.params =  list(color = "black", linetype = 2),
                        cor.coef = TRUE, cor.method = "spearman",
                        xlab = "year of surgery",
                        ylab = "experiment 2, [pg/mL]",
                        title = "MCP1 plaque levels, INT, [pg/mL]",
                        ggtheme = theme_minimal())

p2 


rm(p1, p2)

In this section we make some variables to assist with analysis.

AEDB.CEA.samplesize = nrow(AEDB.CEA)
TRAITS.PROTEIN.RANK = c("MCP1_pg_ml_2015_rank", "MCP1_rank")

TRAITS.CON.RANK = c("Macrophages_rank", "SMC_rank", "MAC_SMC_ratio_rank", "VesselDensity_rank")

TRAITS.BIN = c("CalcificationPlaque", "CollagenPlaque", "Fat10Perc", "IPH",
               "MAC_binned", "SMC_binned")


# "Hospital", 
# "Age", "Gender", 
# "TC_final", "LDL_final", "HDL_final", "TG_final", 
# "systolic", "diastoli", "GFR_MDRD", "BMI", 
# "KDOQI", "BMI_WHO",
# "SmokerCurrent", "eCigarettes", "ePackYearsSmoking",
# "DiabetesStatus", "Hypertension.composite", 
# "Hypertension.drugs", "Med.anticoagulants", "Med.all.antiplatelet", "Med.Statin.LLD", 
# "Stroke_Dx", "sympt", "Symptoms.5G", "restenos",
# "EP_composite", "EP_composite_time",
# "macmean0", "smcmean0", "Macrophages.bin", "SMC.bin",
# "neutrophils", "Mast_cells_plaque",
# "IPH.bin", "vessel_density_averaged",
# "Calc.bin", "Collagen.bin", 
# "Fat.bin_10", "Fat.bin_40", "OverallPlaquePhenotype",
# "IL6_pg_ug_2015", "MCP1_pg_ug_2015", 
# "QC2018_FILTER", "CHIP", "SAMPLE_TYPE",
# "CAD_history", "Stroke_history", "Peripheral.interv",
# "stenose"

# 1.  Age (continuous in 1-year increment). [Age]
# 2.  Sex (male vs. female). [Gender]
# 3.  Presence of hypertension at baseline (defined either as history of hypertension, SBP ≥140 mm Hg, DBP ≥90 mm Hg, or prescription of antihypertensive medications). [Hypertension.composite]
# 4.  Presence of diabetes mellitus at baseline (defined either as a history of diabetes, administration of glucose lowering medication, HbA1c ≥6.5%, fasting glucose ≥126 mg/dl, .or random glucose levels ≥200 mg/dl). [DiabetesStatus]
# 5.  Smoking (current, ex-, never). [SmokerCurrent]
# 6.  LDL-C levels (continuous). [LDL_final]
# 7.  Use of lipid-lowering drugs. [Med.Statin.LLD]
# 8.  Use of antiplatelet drugs. [Med.all.antiplatelet]
# 9.  eGFR (continuous). [GFR_MDRD]
# 10.   BMI (continuous). [BMI]
# 11.   History of cardiovascular disease (stroke, coronary artery disease, peripheral artery disease). [MedHx_CVD] combinatino of: [CAD_history, Stroke_history, Peripheral.interv]
# 12.   Level of stenosis (50-70% vs. 70-99%). [stenose]

# Models 
# Model 1: adjusted for age and sex
# Model 2: adjusted for age, sex, hypertension, diabetes, smoking, LDL-C levels, lipid-lowering drugs, antiplatelet drugs, eGFR, BMI, history of CVD, level of stenosis,

AEDB.CEA$ORdate_epoch <- as.numeric(AEDB.CEA$dateok)
AEDB.CEA$ORdate_year <- as.numeric(year(AEDB.CEA$dateok))

cat("Summary of 'year of surgery' in 'epoch' (); coded as `numeric()`\n")
Summary of 'year of surgery' in 'epoch' (); coded as `numeric()`
summary(AEDB.CEA$ORdate_epoch)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11770   13132   14518   14567   15860   18250 
cat("\nSummary of 'year of surgery' in 'years' (); coded as `factor()`\n")

Summary of 'year of surgery' in 'years' (); coded as `factor()`
table(AEDB.CEA$ORdate_year)

2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 
  81  157  190  185  183  152  138  182  159  164  176  149  163   76   85   65   66   52 
COVARIATES_M1 = c("Age", "Gender", "ORdate_year")
# COVARIATES_M1 = c("Age", "Gender", "ORdate_epoch")

COVARIATES_M2 = c(COVARIATES_M1,  
               "Hypertension.composite", "DiabetesStatus", 
               "SmokerStatus", 
               # "SmokerCurrent",
               "Med.Statin.LLD", "Med.all.antiplatelet", 
               "GFR_MDRD", "BMI", 
               # "CAD_history", "Stroke_history", "Peripheral.interv", 
               "MedHx_CVD",
               "stenose")

# COVARIATES_M3 = c(COVARIATES_M2, "LDL_final")

# COVARIATES_M4 = c(COVARIATES_M2, "hsCRP_plasma")

Model 1

In this model we correct for Age, Gender, and year of surgery.

Here we use the inverse-rank normalized data - visually this is more normally distributed.

Quantitative plaque traits

Analysis of continuous/quantitative plaque traits as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 15, nrow = 0))
cat("Running linear regression...\n")
Running linear regression...
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(TRAITS.CON.RANK)) {
    TRAIT = TRAITS.CON.RANK[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M1) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    ### univariate
    fit <- lm(currentDF[,PROTEIN] ~ currentDF[,TRAIT] + Age + Gender + ORdate_year, data = currentDF)
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))

    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 15, nrow = 0))
    GLM.results.TEMP[1,] = GLM.CON(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing Macrophages_rank
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(PROTEIN)` instead of `PROTEIN` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(TRAIT)` instead of `TRAIT` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(COVARIATES_M1)` instead of `COVARIATES_M1` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
        -254.43741             0.06422             0.32420             0.12666  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.98066 -0.58281 -0.01477  0.58485  3.01698 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        -2.535e+02  1.846e+01 -13.732  < 2e-16 ***
currentDF[, TRAIT]  6.552e-02  2.761e-02   2.373   0.0178 *  
Age                 1.944e-03  2.918e-03   0.666   0.5055    
Gendermale          3.236e-01  5.775e-02   5.603 2.63e-08 ***
ORdate_year         1.261e-01  9.207e-03  13.698  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9087 on 1166 degrees of freedom
Multiple R-squared:  0.1648,    Adjusted R-squared:  0.162 
F-statistic: 57.54 on 4 and 1166 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Macrophages_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Macrophages_rank 
Effect size...............: 0.065515 
Standard error............: 0.027613 
Odds ratio (effect size)..: 1.068 
Lower 95% CI..............: 1.011 
Upper 95% CI..............: 1.127 
T-value...................: 2.372657 
P-value...................: 0.01782216 
R^2.......................: 0.164841 
Adjusted r^2..............: 0.161976 
Sample size of AE DB......: 2423 
Sample size of model......: 1171 
Missing data %............: 51.67148 

- processing SMC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         -232.0776             -0.0943              0.3013              0.1155  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.15076 -0.58587 -0.02393  0.55488  3.09880 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        -2.322e+02  1.827e+01 -12.713  < 2e-16 ***
currentDF[, TRAIT] -9.502e-02  2.851e-02  -3.333 0.000887 ***
Age                -4.616e-04  2.944e-03  -0.157 0.875435    
Gendermale          3.012e-01  5.795e-02   5.198 2.38e-07 ***
ORdate_year         1.156e-01  9.109e-03  12.694  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.904 on 1162 degrees of freedom
Multiple R-squared:  0.1708,    Adjusted R-squared:  0.168 
F-statistic: 59.84 on 4 and 1162 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' SMC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: SMC_rank 
Effect size...............: -0.095019 
Standard error............: 0.02851 
Odds ratio (effect size)..: 0.909 
Lower 95% CI..............: 0.86 
Upper 95% CI..............: 0.962 
T-value...................: -3.332864 
P-value...................: 0.0008866462 
R^2.......................: 0.170817 
Adjusted r^2..............: 0.167963 
Sample size of AE DB......: 2423 
Sample size of model......: 1167 
Missing data %............: 51.83657 

- processing MAC_SMC_ratio_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         -252.3972              0.1248              0.2862              0.1257  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.95999 -0.57823 -0.00289  0.55678  3.03063 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        -2.520e+02  1.785e+01 -14.117  < 2e-16 ***
currentDF[, TRAIT]  1.246e-01  2.747e-02   4.537 6.31e-06 ***
Age                 7.136e-04  2.899e-03   0.246    0.806    
Gendermale          2.861e-01  5.803e-02   4.931 9.38e-07 ***
ORdate_year         1.254e-01  8.904e-03  14.085  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9011 on 1160 degrees of freedom
Multiple R-squared:  0.1775,    Adjusted R-squared:  0.1747 
F-statistic: 62.59 on 4 and 1160 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MAC_SMC_ratio_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MAC_SMC_ratio_rank 
Effect size...............: 0.124615 
Standard error............: 0.027468 
Odds ratio (effect size)..: 1.133 
Lower 95% CI..............: 1.073 
Upper 95% CI..............: 1.195 
T-value...................: 4.536768 
P-value...................: 6.305959e-06 
R^2.......................: 0.17752 
Adjusted r^2..............: 0.174684 
Sample size of AE DB......: 2423 
Sample size of model......: 1165 
Missing data %............: 51.91911 

- processing VesselDensity_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
        -228.08372            -0.06221             0.33587             0.11352  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.04767 -0.60662  0.00131  0.57990  3.05690 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        -2.268e+02  1.916e+01 -11.838  < 2e-16 ***
currentDF[, TRAIT] -6.247e-02  2.862e-02  -2.183   0.0293 *  
Age                 1.921e-03  3.059e-03   0.628   0.5302    
Gendermale          3.356e-01  6.036e-02   5.561 3.38e-08 ***
ORdate_year         1.128e-01  9.561e-03  11.801  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9201 on 1090 degrees of freedom
Multiple R-squared:  0.1558,    Adjusted R-squared:  0.1527 
F-statistic: 50.28 on 4 and 1090 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' VesselDensity_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: VesselDensity_rank 
Effect size...............: -0.062472 
Standard error............: 0.02862 
Odds ratio (effect size)..: 0.939 
Lower 95% CI..............: 0.888 
Upper 95% CI..............: 0.994 
T-value...................: -2.182858 
P-value...................: 0.02925907 
R^2.......................: 0.155768 
Adjusted r^2..............: 0.15267 
Sample size of AE DB......: 2423 
Sample size of model......: 1095 
Missing data %............: 54.80809 

Analysis of MCP1_rank.

- processing Macrophages_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          422.8331              0.1222              0.2600             -0.2111  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4317 -0.6291 -0.0261  0.6543  2.8355 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        414.987584  75.061156   5.529 4.99e-08 ***
currentDF[, TRAIT]   0.121339   0.038035   3.190   0.0015 ** 
Age                 -0.006268   0.004724  -1.327   0.1851    
Gendermale           0.263235   0.090556   2.907   0.0038 ** 
ORdate_year         -0.206979   0.037471  -5.524 5.13e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9598 on 550 degrees of freedom
Multiple R-squared:  0.0847,    Adjusted R-squared:  0.07804 
F-statistic: 12.72 on 4 and 550 DF,  p-value: 6.54e-10

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Macrophages_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Macrophages_rank 
Effect size...............: 0.121339 
Standard error............: 0.038035 
Odds ratio (effect size)..: 1.129 
Lower 95% CI..............: 1.048 
Upper 95% CI..............: 1.216 
T-value...................: 3.19016 
P-value...................: 0.001502979 
R^2.......................: 0.084699 
Adjusted r^2..............: 0.078042 
Sample size of AE DB......: 2423 
Sample size of model......: 555 
Missing data %............: 77.09451 

- processing SMC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
         485.13156            -0.22645            -0.01251             0.22171            -0.24174  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2040 -0.6017 -0.0439  0.6538  2.7241 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        485.131555  74.828140   6.483 2.01e-10 ***
currentDF[, TRAIT]  -0.226449   0.039572  -5.722 1.73e-08 ***
Age                 -0.012514   0.004716  -2.654   0.0082 ** 
Gendermale           0.221712   0.089045   2.490   0.0131 *  
ORdate_year         -0.241741   0.037348  -6.473 2.14e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9371 on 547 degrees of freedom
Multiple R-squared:  0.1219,    Adjusted R-squared:  0.1155 
F-statistic: 18.98 on 4 and 547 DF,  p-value: 1.253e-14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' SMC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: SMC_rank 
Effect size...............: -0.226449 
Standard error............: 0.039572 
Odds ratio (effect size)..: 0.797 
Lower 95% CI..............: 0.738 
Upper 95% CI..............: 0.862 
T-value...................: -5.722399 
P-value...................: 1.731767e-08 
R^2.......................: 0.121879 
Adjusted r^2..............: 0.115458 
Sample size of AE DB......: 2423 
Sample size of model......: 552 
Missing data %............: 77.21832 

- processing MAC_SMC_ratio_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
         469.90060             0.22103            -0.01003             0.21847            -0.23424  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3533 -0.5974 -0.0586  0.6573  2.9781 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        469.90060   73.95935   6.353 4.44e-10 ***
currentDF[, TRAIT]   0.22102    0.03612   6.119 1.80e-09 ***
Age                 -0.01003    0.00464  -2.162   0.0311 *  
Gendermale           0.21847    0.08873   2.462   0.0141 *  
ORdate_year         -0.23424    0.03692  -6.345 4.68e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.933 on 546 degrees of freedom
Multiple R-squared:  0.1294,    Adjusted R-squared:  0.123 
F-statistic: 20.29 on 4 and 546 DF,  p-value: 1.346e-15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MAC_SMC_ratio_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MAC_SMC_ratio_rank 
Effect size...............: 0.221025 
Standard error............: 0.036122 
Odds ratio (effect size)..: 1.247 
Lower 95% CI..............: 1.162 
Upper 95% CI..............: 1.339 
T-value...................: 6.118872 
P-value...................: 1.799303e-09 
R^2.......................: 0.129413 
Adjusted r^2..............: 0.123035 
Sample size of AE DB......: 2423 
Sample size of model......: 551 
Missing data %............: 77.2596 

- processing VesselDensity_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   427.9795       0.2941      -0.2137  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4045 -0.5978 -0.0351  0.6466  2.6590 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        407.491047  77.437980   5.262 2.06e-07 ***
currentDF[, TRAIT]  -0.055611   0.050753  -1.096  0.27369    
Age                 -0.006762   0.004796  -1.410  0.15917    
Gendermale           0.296448   0.092030   3.221  0.00135 ** 
ORdate_year         -0.203215   0.038660  -5.257 2.12e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9662 on 539 degrees of freedom
Multiple R-squared:  0.07477,   Adjusted R-squared:  0.0679 
F-statistic: 10.89 on 4 and 539 DF,  p-value: 1.697e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' VesselDensity_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: VesselDensity_rank 
Effect size...............: -0.055611 
Standard error............: 0.050753 
Odds ratio (effect size)..: 0.946 
Lower 95% CI..............: 0.856 
Upper 95% CI..............: 1.045 
T-value...................: -1.09571 
P-value...................: 0.2736949 
R^2.......................: 0.07477 
Adjusted r^2..............: 0.067904 
Sample size of AE DB......: 2423 
Sample size of model......: 544 
Missing data %............: 77.54849 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "T-value", "P-value", "r^2", "r^2_adj", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`T-value` <- as.numeric(GLM.results$`T-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2` <- as.numeric(GLM.results$`r^2`)
GLM.results$`r^2_adj` <- as.numeric(GLM.results$`r^2_adj`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
library(openxlsx)
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Con.Uni.Protein.PlaquePhenotypes.RANK.MODEL1.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Con.Uni.PlaquePheno")
# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

Binary plaque traits

Analysis of binary plaque traits as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 16, nrow = 0))
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(TRAITS.BIN)) {
    TRAIT = TRAITS.BIN[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M1) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    ### univariate
    fit <- glm(as.factor(currentDF[,TRAIT]) ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year,
              data  =  currentDF, family = binomial(link = "logit"))
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 16, nrow = 0))
    GLM.results.TEMP[1,] = GLM.BIN(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing CalcificationPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + ORdate_year, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age           ORdate_year  
           310.77553              -0.34903               0.02309              -0.15567  

Degrees of Freedom: 1180 Total (i.e. Null);  1177 Residual
Null Deviance:      1637 
Residual Deviance: 1513     AIC: 1521

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.8216  -1.0490  -0.6315   1.0837   2.0978  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          312.506897  44.478670   7.026 2.13e-12 ***
currentDF[, PROTEIN]  -0.340451   0.068997  -4.934 8.04e-07 ***
Age                    0.023128   0.006798   3.402 0.000669 ***
Gendermale            -0.109930   0.134724  -0.816 0.414521    
ORdate_year           -0.156493   0.022190  -7.052 1.76e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1636.6  on 1180  degrees of freedom
Residual deviance: 1512.0  on 1176  degrees of freedom
AIC: 1522

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' CalcificationPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: CalcificationPlaque 
Effect size...............: -0.340451 
Standard error............: 0.068997 
Odds ratio (effect size)..: 0.711 
Lower 95% CI..............: 0.621 
Upper 95% CI..............: 0.814 
Z-value...................: -4.934311 
P-value...................: 8.04341e-07 
Hosmer and Lemeshow r^2...: 0.07616 
Cox and Snell r^2.........: 0.100162 
Nagelkerke's pseudo r^2...: 0.133573 
Sample size of AE DB......: 2423 
Sample size of model......: 1181 
Missing data %............: 51.25877 

- processing CollagenPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN], 
    family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]  
              1.3403               -0.2873  

Degrees of Freedom: 1181 Total (i.e. Null);  1180 Residual
Null Deviance:      1217 
Residual Deviance: 1202     AIC: 1206

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2054   0.5389   0.6456   0.7150   1.0194  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -17.700869  50.816422  -0.348 0.727593    
currentDF[, PROTEIN]  -0.304533   0.079925  -3.810 0.000139 ***
Age                    0.004359   0.007869   0.554 0.579607    
Gendermale             0.066303   0.158551   0.418 0.675814    
ORdate_year            0.009316   0.025343   0.368 0.713171    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1217.1  on 1181  degrees of freedom
Residual deviance: 1200.8  on 1177  degrees of freedom
AIC: 1210.8

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' CollagenPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: CollagenPlaque 
Effect size...............: -0.304533 
Standard error............: 0.079925 
Odds ratio (effect size)..: 0.737 
Lower 95% CI..............: 0.631 
Upper 95% CI..............: 0.863 
Z-value...................: -3.810259 
P-value...................: 0.0001388211 
Hosmer and Lemeshow r^2...: 0.013321 
Cox and Snell r^2.........: 0.013622 
Nagelkerke's pseudo r^2...: 0.021189 
Sample size of AE DB......: 2423 
Sample size of model......: 1182 
Missing data %............: 51.2175 

- processing Fat10Perc


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age            Gendermale           ORdate_year  
           467.88804               0.44852               0.01646               0.80595              -0.23342  

Degrees of Freedom: 1181 Total (i.e. Null);  1177 Residual
Null Deviance:      1390 
Residual Deviance: 1258     AIC: 1268

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.6456  -0.9830   0.5993   0.7919   1.6326  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          467.888045  53.325556   8.774  < 2e-16 ***
currentDF[, PROTEIN]   0.448516   0.079848   5.617 1.94e-08 ***
Age                    0.016457   0.007424   2.217   0.0266 *  
Gendermale             0.805951   0.144389   5.582 2.38e-08 ***
ORdate_year           -0.233421   0.026589  -8.779  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1390.3  on 1181  degrees of freedom
Residual deviance: 1258.3  on 1177  degrees of freedom
AIC: 1268.3

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Fat10Perc ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Fat10Perc 
Effect size...............: 0.448516 
Standard error............: 0.079848 
Odds ratio (effect size)..: 1.566 
Lower 95% CI..............: 1.339 
Upper 95% CI..............: 1.831 
Z-value...................: 5.617133 
P-value...................: 1.941519e-08 
Hosmer and Lemeshow r^2...: 0.094988 
Cox and Snell r^2.........: 0.105714 
Nagelkerke's pseudo r^2...: 0.152862 
Sample size of AE DB......: 2423 
Sample size of model......: 1182 
Missing data %............: 51.2175 

- processing IPH


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale           ORdate_year  
            381.3362                0.1826                0.6048               -0.1900  

Degrees of Freedom: 1178 Total (i.e. Null);  1175 Residual
Null Deviance:      1578 
Residual Deviance: 1483     AIC: 1491

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0163  -1.1800   0.7413   0.9609   1.6978  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          386.982789  46.879353   8.255  < 2e-16 ***
currentDF[, PROTEIN]   0.181469   0.069739   2.602  0.00926 ** 
Age                    0.008978   0.006779   1.324  0.18537    
Gendermale             0.603961   0.134706   4.484 7.34e-06 ***
ORdate_year           -0.193095   0.023380  -8.259  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1578.0  on 1178  degrees of freedom
Residual deviance: 1481.4  on 1174  degrees of freedom
AIC: 1491.4

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IPH ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IPH 
Effect size...............: 0.181469 
Standard error............: 0.069739 
Odds ratio (effect size)..: 1.199 
Lower 95% CI..............: 1.046 
Upper 95% CI..............: 1.375 
Z-value...................: 2.602126 
P-value...................: 0.009264778 
Hosmer and Lemeshow r^2...: 0.061186 
Cox and Snell r^2.........: 0.078628 
Nagelkerke's pseudo r^2...: 0.106581 
Sample size of AE DB......: 2423 
Sample size of model......: 1179 
Missing data %............: 51.34131 

- processing MAC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale           ORdate_year  
            261.8955                0.2204                0.5260               -0.1306  

Degrees of Freedom: 1175 Total (i.e. Null);  1172 Residual
Null Deviance:      1629 
Residual Deviance: 1571     AIC: 1579

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7993  -1.1493   0.8206   1.0983   1.6704  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          258.120368  44.216573   5.838 5.29e-09 ***
currentDF[, PROTEIN]   0.221792   0.066957   3.312 0.000925 ***
Age                   -0.006995   0.006559  -1.066 0.286220    
Gendermale             0.528275   0.131558   4.016 5.93e-05 ***
ORdate_year           -0.128524   0.022049  -5.829 5.57e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1629.3  on 1175  degrees of freedom
Residual deviance: 1570.2  on 1171  degrees of freedom
AIC: 1580.2

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MAC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MAC_binned 
Effect size...............: 0.221792 
Standard error............: 0.066957 
Odds ratio (effect size)..: 1.248 
Lower 95% CI..............: 1.095 
Upper 95% CI..............: 1.423 
Z-value...................: 3.312458 
P-value...................: 0.0009247989 
Hosmer and Lemeshow r^2...: 0.036292 
Cox and Snell r^2.........: 0.049038 
Nagelkerke's pseudo r^2...: 0.065402 
Sample size of AE DB......: 2423 
Sample size of model......: 1176 
Missing data %............: 51.46513 

- processing SMC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age            Gendermale  
             2.83719              -0.30011              -0.02675              -0.29630  

Degrees of Freedom: 1176 Total (i.e. Null);  1173 Residual
Null Deviance:      1470 
Residual Deviance: 1425     AIC: 1433

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9616  -1.3190   0.7505   0.8931   1.3158  

Coefficients:
                      Estimate Std. Error z value Pr(>|z|)    
(Intercept)          25.048652  45.710531   0.548 0.583703    
currentDF[, PROTEIN] -0.287159   0.071979  -3.989 6.62e-05 ***
Age                  -0.026390   0.007197  -3.667 0.000246 ***
Gendermale           -0.299149   0.144473  -2.071 0.038395 *  
ORdate_year          -0.011078   0.022797  -0.486 0.626996    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1470.1  on 1176  degrees of freedom
Residual deviance: 1425.2  on 1172  degrees of freedom
AIC: 1435.2

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' SMC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: SMC_binned 
Effect size...............: -0.287159 
Standard error............: 0.071979 
Odds ratio (effect size)..: 0.75 
Lower 95% CI..............: 0.652 
Upper 95% CI..............: 0.864 
Z-value...................: -3.989465 
P-value...................: 6.622254e-05 
Hosmer and Lemeshow r^2...: 0.030554 
Cox and Snell r^2.........: 0.037444 
Nagelkerke's pseudo r^2...: 0.0525 
Sample size of AE DB......: 2423 
Sample size of model......: 1177 
Missing data %............: 51.42386 

Analysis of MCP1_rank.

- processing CalcificationPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
(Intercept)  ORdate_year  
  -451.4488       0.2255  

Degrees of Freedom: 555 Total (i.e. Null);  554 Residual
Null Deviance:      749.7 
Residual Deviance: 741.7    AIC: 745.7

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6532  -1.2833   0.8799   1.0256   1.3391  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)  
(Intercept)          -404.18119  165.52876  -2.442   0.0146 *
currentDF[, PROTEIN]   -0.09186    0.09068  -1.013   0.3110  
Age                     0.01195    0.01016   1.176   0.2397  
Gendermale             -0.15600    0.19729  -0.791   0.4291  
ORdate_year             0.20155    0.08263   2.439   0.0147 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 749.67  on 555  degrees of freedom
Residual deviance: 738.30  on 551  degrees of freedom
AIC: 748.3

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' CalcificationPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: CalcificationPlaque 
Effect size...............: -0.091864 
Standard error............: 0.090683 
Odds ratio (effect size)..: 0.912 
Lower 95% CI..............: 0.764 
Upper 95% CI..............: 1.09 
Z-value...................: -1.013025 
P-value...................: 0.3110484 
Hosmer and Lemeshow r^2...: 0.015167 
Cox and Snell r^2.........: 0.020242 
Nagelkerke's pseudo r^2...: 0.027342 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing CollagenPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    ORdate_year, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]           ORdate_year  
           -780.9134               -0.4799                0.3905  

Degrees of Freedom: 553 Total (i.e. Null);  551 Residual
Null Deviance:      538 
Residual Deviance: 498  AIC: 504

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3527   0.3688   0.5145   0.6775   1.4039  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -801.64188  214.85023  -3.731 0.000191 ***
currentDF[, PROTEIN]   -0.48686    0.12206  -3.989 6.65e-05 ***
Age                    -0.01852    0.01355  -1.367 0.171532    
Gendermale             -0.14801    0.26231  -0.564 0.572575    
ORdate_year             0.40152    0.10726   3.743 0.000182 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 537.98  on 553  degrees of freedom
Residual deviance: 495.64  on 549  degrees of freedom
AIC: 505.64

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' CollagenPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: CollagenPlaque 
Effect size...............: -0.486864 
Standard error............: 0.122064 
Odds ratio (effect size)..: 0.615 
Lower 95% CI..............: 0.484 
Upper 95% CI..............: 0.781 
Z-value...................: -3.988597 
P-value...................: 6.646533e-05 
Hosmer and Lemeshow r^2...: 0.0787 
Cox and Snell r^2.........: 0.073577 
Nagelkerke's pseudo r^2...: 0.118419 
Sample size of AE DB......: 2423 
Sample size of model......: 554 
Missing data %............: 77.13578 

- processing Fat10Perc


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale  
              1.2197                0.6668                0.5508  

Degrees of Freedom: 555 Total (i.e. Null);  553 Residual
Null Deviance:      538.8 
Residual Deviance: 497.2    AIC: 503.2

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.4515   0.3661   0.5131   0.6573   1.4042  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -2.478e+02  2.145e+02  -1.156    0.248    
currentDF[, PROTEIN]  6.953e-01  1.238e-01   5.617 1.94e-08 ***
Age                   4.338e-03  1.299e-02   0.334    0.738    
Gendermale            5.263e-01  2.365e-01   2.226    0.026 *  
ORdate_year           1.242e-01  1.071e-01   1.160    0.246    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 538.82  on 555  degrees of freedom
Residual deviance: 495.66  on 551  degrees of freedom
AIC: 505.66

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Fat10Perc ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Fat10Perc 
Effect size...............: 0.695328 
Standard error............: 0.123786 
Odds ratio (effect size)..: 2.004 
Lower 95% CI..............: 1.573 
Upper 95% CI..............: 2.555 
Z-value...................: 5.617164 
P-value...................: 1.941174e-08 
Hosmer and Lemeshow r^2...: 0.080102 
Cox and Snell r^2.........: 0.07469 
Nagelkerke's pseudo r^2...: 0.120356 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing IPH


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ Age + Gender, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
(Intercept)          Age   Gendermale  
   -0.76646      0.02073      0.78990  

Degrees of Freedom: 555 Total (i.e. Null);  553 Residual
Null Deviance:      611.8 
Residual Deviance: 594.4    AIC: 600.4

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0029   0.5582   0.6468   0.7206   1.1969  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)           15.339755 191.148455   0.080 0.936038    
currentDF[, PROTEIN]   0.064053   0.104480   0.613 0.539831    
Age                    0.021375   0.011622   1.839 0.065905 .  
Gendermale             0.774693   0.212151   3.652 0.000261 ***
ORdate_year           -0.008053   0.095422  -0.084 0.932743    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 611.78  on 555  degrees of freedom
Residual deviance: 593.99  on 551  degrees of freedom
AIC: 603.99

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IPH ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IPH 
Effect size...............: 0.064053 
Standard error............: 0.10448 
Odds ratio (effect size)..: 1.066 
Lower 95% CI..............: 0.869 
Upper 95% CI..............: 1.308 
Z-value...................: 0.613068 
P-value...................: 0.5398311 
Hosmer and Lemeshow r^2...: 0.029089 
Cox and Snell r^2.........: 0.031501 
Nagelkerke's pseudo r^2...: 0.047211 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing MAC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale           ORdate_year  
           -823.9069                0.3857                0.3390                0.4112  

Degrees of Freedom: 551 Total (i.e. Null);  548 Residual
Null Deviance:      749.1 
Residual Deviance: 711.3    AIC: 719.3

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9353  -1.1973   0.7687   1.0163   1.6249  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -839.30600  175.54024  -4.781 1.74e-06 ***
currentDF[, PROTEIN]    0.37956    0.09495   3.998 6.40e-05 ***
Age                    -0.01358    0.01043  -1.302   0.1928    
Gendermale              0.34867    0.19858   1.756   0.0791 .  
ORdate_year             0.41935    0.08763   4.785 1.71e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 749.15  on 551  degrees of freedom
Residual deviance: 709.62  on 547  degrees of freedom
AIC: 719.62

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MAC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MAC_binned 
Effect size...............: 0.379557 
Standard error............: 0.094948 
Odds ratio (effect size)..: 1.462 
Lower 95% CI..............: 1.213 
Upper 95% CI..............: 1.761 
Z-value...................: 3.997506 
P-value...................: 6.401333e-05 
Hosmer and Lemeshow r^2...: 0.052768 
Cox and Snell r^2.........: 0.06911 
Nagelkerke's pseudo r^2...: 0.093064 
Sample size of AE DB......: 2423 
Sample size of model......: 552 
Missing data %............: 77.21832 

- processing SMC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age            Gendermale           ORdate_year  
          -331.25779              -0.44085              -0.03875              -0.59679               0.16731  

Degrees of Freedom: 552 Total (i.e. Null);  548 Residual
Null Deviance:      667.1 
Residual Deviance: 622.7    AIC: 632.7

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.1704  -1.2187   0.6567   0.8334   1.4336  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -331.25779  184.63912  -1.794  0.07280 .  
currentDF[, PROTEIN]   -0.44085    0.10541  -4.182 2.88e-05 ***
Age                    -0.03875    0.01183  -3.276  0.00105 ** 
Gendermale             -0.59679    0.23370  -2.554  0.01066 *  
ORdate_year             0.16731    0.09218   1.815  0.06952 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 667.10  on 552  degrees of freedom
Residual deviance: 622.68  on 548  degrees of freedom
AIC: 632.68

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' SMC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: SMC_binned 
Effect size...............: -0.440853 
Standard error............: 0.105406 
Odds ratio (effect size)..: 0.643 
Lower 95% CI..............: 0.523 
Upper 95% CI..............: 0.791 
Z-value...................: -4.182437 
P-value...................: 2.88401e-05 
Hosmer and Lemeshow r^2...: 0.066596 
Cox and Snell r^2.........: 0.077195 
Nagelkerke's pseudo r^2...: 0.110168 
Sample size of AE DB......: 2423 
Sample size of model......: 553 
Missing data %............: 77.17705 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "Z-value", "P-value", "r^2_l", "r^2_cs", "r^2_nagelkerke", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`Z-value` <- as.numeric(GLM.results$`Z-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2_l` <- as.numeric(GLM.results$`r^2_l`)
GLM.results$`r^2_cs` <- as.numeric(GLM.results$`r^2_cs`)
GLM.results$`r^2_nagelkerke` <- as.numeric(GLM.results$`r^2_nagelkerke`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Bin.Uni.Protein.PlaquePhenotypes.RANK.MODEL1.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Bin.Uni.PlaquePheno")

# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

Model 2

In this model we correct for Age, Gender, year of surgery, Hypertension status, Diabetes status, current smoker status, lipid-lowering drugs (LLDs), antiplatelet medication, eGFR (MDRD), BMI, MedHx_CVD (combination of CAD history, stroke history, and peripheral interventions), and stenosis.

Here we use the inverse-rank normalized data - visually this is more normally distributed.

Quantitative plaque traits

Analysis of continuous/quantitative plaque traits as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 15, nrow = 0))
cat("Running linear regression...\n")
Running linear regression...
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(TRAITS.CON.RANK)) {
    TRAIT = TRAITS.CON.RANK[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M2) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    ### univariate
    fit <- lm(currentDF[,PROTEIN] ~ currentDF[,TRAIT] + Age + Gender + ORdate_year + 
                Hypertension.composite + DiabetesStatus + SmokerStatus + 
                Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
                MedHx_CVD + stenose, 
              data = currentDF)
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 15, nrow = 0))
    GLM.results.TEMP[1,] = GLM.CON(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing Macrophages_rank
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(COVARIATES_M2)` instead of `COVARIATES_M2` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
               -260.49868                    0.06069                    0.29422                    0.12984                   -0.13333                   -0.21052  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.90020 -0.57577 -0.02735  0.60041  3.00874 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               -2.635e+02  2.097e+01 -12.563  < 2e-16 ***
currentDF[, TRAIT]         5.919e-02  2.995e-02   1.977  0.04835 *  
Age                        1.825e-03  3.597e-03   0.507  0.61205    
Gendermale                 3.196e-01  6.437e-02   4.964  8.1e-07 ***
ORdate_year                1.313e-01  1.046e-02  12.553  < 2e-16 ***
Hypertension.compositeyes -1.348e-01  8.759e-02  -1.539  0.12424    
DiabetesStatusDiabetes    -4.051e-02  7.024e-02  -0.577  0.56426    
SmokerStatusEx-smoker     -5.669e-02  6.636e-02  -0.854  0.39319    
SmokerStatusNever smoked   2.783e-02  9.370e-02   0.297  0.76651    
Med.Statin.LLDyes         -2.103e-01  7.096e-02  -2.964  0.00311 ** 
Med.all.antiplateletyes    6.384e-02  9.880e-02   0.646  0.51833    
GFR_MDRD                  -4.344e-04  1.529e-03  -0.284  0.77647    
BMI                       -2.830e-03  8.022e-03  -0.353  0.72432    
MedHx_CVDyes               5.212e-03  6.028e-02   0.086  0.93111    
stenose50-70%             -1.761e-01  3.922e-01  -0.449  0.65353    
stenose70-90%              4.823e-03  3.765e-01   0.013  0.98978    
stenose90-99%             -3.883e-02  3.770e-01  -0.103  0.91800    
stenose100% (Occlusion)   -2.378e-01  4.841e-01  -0.491  0.62344    
stenose50-99%             -4.599e-01  5.907e-01  -0.779  0.43637    
stenose70-99%             -3.348e-01  5.299e-01  -0.632  0.52770    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.911 on 1001 degrees of freedom
Multiple R-squared:  0.1751,    Adjusted R-squared:  0.1595 
F-statistic: 11.19 on 19 and 1001 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Macrophages_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Macrophages_rank 
Effect size...............: 0.059193 
Standard error............: 0.029945 
Odds ratio (effect size)..: 1.061 
Lower 95% CI..............: 1.001 
Upper 95% CI..............: 1.125 
T-value...................: 1.976704 
P-value...................: 0.04834925 
R^2.......................: 0.175135 
Adjusted r^2..............: 0.159478 
Sample size of AE DB......: 2423 
Sample size of model......: 1021 
Missing data %............: 57.86215 

- processing SMC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
               -235.47131                   -0.09684                    0.26854                    0.11737                   -0.13276                   -0.19071  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.06717 -0.59118 -0.01529  0.56640  3.08389 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               -2.401e+02  2.070e+01 -11.601  < 2e-16 ***
currentDF[, TRAIT]        -9.359e-02  3.061e-02  -3.058  0.00229 ** 
Age                       -8.914e-05  3.618e-03  -0.025  0.98035    
Gendermale                 2.930e-01  6.519e-02   4.494  7.8e-06 ***
ORdate_year                1.197e-01  1.032e-02  11.598  < 2e-16 ***
Hypertension.compositeyes -1.246e-01  8.751e-02  -1.424  0.15478    
DiabetesStatusDiabetes    -4.013e-02  7.016e-02  -0.572  0.56745    
SmokerStatusEx-smoker     -5.388e-02  6.638e-02  -0.812  0.41716    
SmokerStatusNever smoked   2.007e-02  9.357e-02   0.214  0.83020    
Med.Statin.LLDyes         -1.952e-01  7.081e-02  -2.756  0.00595 ** 
Med.all.antiplateletyes    4.912e-02  9.867e-02   0.498  0.61872    
GFR_MDRD                  -1.574e-04  1.530e-03  -0.103  0.91809    
BMI                       -3.457e-03  8.022e-03  -0.431  0.66658    
MedHx_CVDyes               2.805e-03  6.029e-02   0.047  0.96290    
stenose50-70%             -1.347e-01  3.917e-01  -0.344  0.73094    
stenose70-90%              5.330e-02  3.760e-01   0.142  0.88731    
stenose90-99%              7.963e-03  3.766e-01   0.021  0.98313    
stenose100% (Occlusion)   -2.181e-01  4.833e-01  -0.451  0.65191    
stenose50-99%             -3.620e-01  5.902e-01  -0.613  0.53980    
stenose70-99%             -2.212e-01  5.293e-01  -0.418  0.67615    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9094 on 997 degrees of freedom
Multiple R-squared:  0.1788,    Adjusted R-squared:  0.1631 
F-statistic: 11.42 on 19 and 997 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' SMC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: SMC_rank 
Effect size...............: -0.093585 
Standard error............: 0.030608 
Odds ratio (effect size)..: 0.911 
Lower 95% CI..............: 0.858 
Upper 95% CI..............: 0.967 
T-value...................: -3.057532 
P-value...................: 0.002291186 
R^2.......................: 0.17877 
Adjusted r^2..............: 0.16312 
Sample size of AE DB......: 2423 
Sample size of model......: 1017 
Missing data %............: 58.02724 

- processing MAC_SMC_ratio_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
                -257.0356                     0.1286                     0.2537                     0.1281                    -0.1341                    -0.2143  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.87932 -0.58271 -0.01362  0.55751  3.02886 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               -2.621e+02  2.028e+01 -12.925  < 2e-16 ***
currentDF[, TRAIT]         1.256e-01  2.973e-02   4.227 2.59e-05 ***
Age                        1.042e-03  3.587e-03   0.291  0.77144    
Gendermale                 2.771e-01  6.516e-02   4.252 2.32e-05 ***
ORdate_year                1.306e-01  1.011e-02  12.916  < 2e-16 ***
Hypertension.compositeyes -1.291e-01  8.719e-02  -1.481  0.13889    
DiabetesStatusDiabetes    -3.981e-02  6.990e-02  -0.570  0.56914    
SmokerStatusEx-smoker     -5.634e-02  6.623e-02  -0.851  0.39520    
SmokerStatusNever smoked   2.452e-03  9.355e-02   0.026  0.97910    
Med.Statin.LLDyes         -2.159e-01  7.072e-02  -3.053  0.00232 ** 
Med.all.antiplateletyes    6.327e-02  9.826e-02   0.644  0.51976    
GFR_MDRD                  -2.742e-04  1.523e-03  -0.180  0.85713    
BMI                       -3.173e-03  8.000e-03  -0.397  0.69171    
MedHx_CVDyes              -4.603e-03  6.019e-02  -0.076  0.93906    
stenose50-70%             -1.642e-01  3.904e-01  -0.421  0.67409    
stenose70-90%              2.382e-02  3.744e-01   0.064  0.94928    
stenose90-99%             -4.335e-03  3.750e-01  -0.012  0.99078    
stenose100% (Occlusion)   -1.729e-01  4.818e-01  -0.359  0.71968    
stenose50-99%             -4.007e-01  5.875e-01  -0.682  0.49537    
stenose70-99%             -2.931e-01  5.268e-01  -0.556  0.57804    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.906 on 996 degrees of freedom
Multiple R-squared:  0.1857,    Adjusted R-squared:  0.1701 
F-statistic: 11.95 on 19 and 996 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MAC_SMC_ratio_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MAC_SMC_ratio_rank 
Effect size...............: 0.125649 
Standard error............: 0.029729 
Odds ratio (effect size)..: 1.134 
Lower 95% CI..............: 1.07 
Upper 95% CI..............: 1.202 
T-value...................: 4.226533 
P-value...................: 2.591157e-05 
R^2.......................: 0.185682 
Adjusted r^2..............: 0.170148 
Sample size of AE DB......: 2423 
Sample size of model......: 1016 
Missing data %............: 58.06851 

- processing VesselDensity_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
               -232.26066                   -0.07525                    0.29943                    0.11576                   -0.12715                   -0.21061  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.96576 -0.59822 -0.00485  0.58684  3.01447 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               -2.349e+02  2.150e+01 -10.925  < 2e-16 ***
currentDF[, TRAIT]        -7.728e-02  3.096e-02  -2.496  0.01273 *  
Age                        1.892e-03  3.757e-03   0.504  0.61463    
Gendermale                 3.218e-01  6.710e-02   4.796 1.88e-06 ***
ORdate_year                1.171e-01  1.073e-02  10.912  < 2e-16 ***
Hypertension.compositeyes -1.342e-01  9.157e-02  -1.466  0.14306    
DiabetesStatusDiabetes    -5.770e-02  7.505e-02  -0.769  0.44220    
SmokerStatusEx-smoker     -4.766e-02  6.953e-02  -0.685  0.49321    
SmokerStatusNever smoked   7.042e-03  9.807e-02   0.072  0.94278    
Med.Statin.LLDyes         -2.113e-01  7.346e-02  -2.877  0.00411 ** 
Med.all.antiplateletyes    7.706e-02  1.049e-01   0.735  0.46265    
GFR_MDRD                  -6.724e-04  1.607e-03  -0.418  0.67581    
BMI                       -2.815e-04  8.387e-03  -0.034  0.97323    
MedHx_CVDyes               1.458e-02  6.296e-02   0.232  0.81686    
stenose50-70%             -2.957e-01  4.327e-01  -0.683  0.49451    
stenose70-90%             -5.852e-02  4.163e-01  -0.141  0.88824    
stenose90-99%             -1.188e-01  4.164e-01  -0.285  0.77550    
stenose100% (Occlusion)   -3.299e-01  5.170e-01  -0.638  0.52349    
stenose50-99%             -3.890e-01  6.203e-01  -0.627  0.53068    
stenose70-99%             -5.688e-01  6.212e-01  -0.916  0.36010    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9202 on 933 degrees of freedom
Multiple R-squared:   0.17, Adjusted R-squared:  0.1531 
F-statistic: 10.06 on 19 and 933 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' VesselDensity_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: VesselDensity_rank 
Effect size...............: -0.077283 
Standard error............: 0.030963 
Odds ratio (effect size)..: 0.926 
Lower 95% CI..............: 0.871 
Upper 95% CI..............: 0.984 
T-value...................: -2.496001 
P-value...................: 0.01273189 
R^2.......................: 0.169991 
Adjusted r^2..............: 0.153088 
Sample size of AE DB......: 2423 
Sample size of model......: 953 
Missing data %............: 60.66859 

Analysis of MCP1_rank.

- processing Macrophages_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 441.5668                     0.1036                     0.2776                    -0.2203                    -0.2432  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3192 -0.6253  0.0206  0.6596  2.6344 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.154e+02  8.330e+01   4.987 8.60e-07 ***
currentDF[, TRAIT]         9.996e-02  4.118e-02   2.427  0.01558 *  
Age                       -9.280e-03  5.771e-03  -1.608  0.10849    
Gendermale                 3.003e-01  1.002e-01   2.997  0.00287 ** 
ORdate_year               -2.067e-01  4.157e-02  -4.972 9.23e-07 ***
Hypertension.compositeyes -2.382e-01  1.329e-01  -1.791  0.07385 .  
DiabetesStatusDiabetes    -6.961e-02  1.124e-01  -0.619  0.53601    
SmokerStatusEx-smoker      8.372e-02  9.983e-02   0.839  0.40209    
SmokerStatusNever smoked   2.684e-01  1.476e-01   1.819  0.06960 .  
Med.Statin.LLDyes         -1.509e-01  1.035e-01  -1.457  0.14568    
Med.all.antiplateletyes    1.368e-01  1.587e-01   0.862  0.38929    
GFR_MDRD                  -1.657e-04  2.489e-03  -0.067  0.94696    
BMI                       -1.297e-02  1.190e-02  -1.090  0.27621    
MedHx_CVDyes               2.265e-02  9.344e-02   0.242  0.80855    
stenose50-70%             -4.499e-01  6.185e-01  -0.727  0.46738    
stenose70-90%             -2.733e-01  5.744e-01  -0.476  0.63444    
stenose90-99%             -2.510e-01  5.728e-01  -0.438  0.66144    
stenose100% (Occlusion)   -9.705e-01  7.264e-01  -1.336  0.18217    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9725 on 479 degrees of freedom
Multiple R-squared:  0.1108,    Adjusted R-squared:  0.0792 
F-statistic:  3.51 on 17 and 479 DF,  p-value: 3.139e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Macrophages_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Macrophages_rank 
Effect size...............: 0.099963 
Standard error............: 0.041184 
Odds ratio (effect size)..: 1.105 
Lower 95% CI..............: 1.019 
Upper 95% CI..............: 1.198 
T-value...................: 2.427249 
P-value...................: 0.01558152 
R^2.......................: 0.110762 
Adjusted r^2..............: 0.079203 
Sample size of AE DB......: 2423 
Sample size of model......: 497 
Missing data %............: 79.48824 

- processing SMC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                        Age                 Gendermale                ORdate_year  Hypertension.compositeyes  
                511.09348                   -0.22506                   -0.01132                    0.23728                   -0.25465                   -0.19903  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1076 -0.6197 -0.0034  0.6938  2.4632 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.972e+02  8.244e+01   6.031 3.26e-09 ***
currentDF[, TRAIT]        -2.277e-01  4.248e-02  -5.361 1.29e-07 ***
Age                       -1.495e-02  5.694e-03  -2.626  0.00891 ** 
Gendermale                 2.430e-01  9.865e-02   2.463  0.01411 *  
ORdate_year               -2.474e-01  4.114e-02  -6.013 3.63e-09 ***
Hypertension.compositeyes -2.009e-01  1.285e-01  -1.563  0.11877    
DiabetesStatusDiabetes    -7.173e-02  1.095e-01  -0.655  0.51256    
SmokerStatusEx-smoker      1.214e-01  9.718e-02   1.249  0.21228    
SmokerStatusNever smoked   2.460e-01  1.435e-01   1.714  0.08712 .  
Med.Statin.LLDyes         -1.412e-01  1.011e-01  -1.397  0.16307    
Med.all.antiplateletyes    1.136e-01  1.545e-01   0.735  0.46259    
GFR_MDRD                   2.431e-05  2.423e-03   0.010  0.99200    
BMI                       -1.152e-02  1.157e-02  -0.996  0.31990    
MedHx_CVDyes               1.966e-02  9.120e-02   0.216  0.82941    
stenose50-70%             -3.893e-01  6.021e-01  -0.647  0.51816    
stenose70-90%             -2.757e-01  5.591e-01  -0.493  0.62215    
stenose90-99%             -2.863e-01  5.573e-01  -0.514  0.60768    
stenose100% (Occlusion)   -1.135e+00  7.069e-01  -1.605  0.10909    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9465 on 477 degrees of freedom
Multiple R-squared:  0.1508,    Adjusted R-squared:  0.1206 
F-statistic: 4.983 on 17 and 477 DF,  p-value: 5.352e-10

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' SMC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: SMC_rank 
Effect size...............: -0.22772 
Standard error............: 0.042481 
Odds ratio (effect size)..: 0.796 
Lower 95% CI..............: 0.733 
Upper 95% CI..............: 0.865 
T-value...................: -5.360554 
P-value...................: 1.29467e-07 
R^2.......................: 0.150815 
Adjusted r^2..............: 0.12055 
Sample size of AE DB......: 2423 
Sample size of model......: 495 
Missing data %............: 79.57078 

- processing MAC_SMC_ratio_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + Med.Statin.LLD, 
    data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                        Age                 Gendermale                ORdate_year  Hypertension.compositeyes  
               467.386591                   0.217255                  -0.009929                   0.229963                  -0.232837                  -0.219314  
        Med.Statin.LLDyes  
                -0.151354  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2086 -0.6173 -0.0234  0.6782  2.6562 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.666e+02  8.141e+01   5.732 1.77e-08 ***
currentDF[, TRAIT]         2.178e-01  3.972e-02   5.485 6.72e-08 ***
Age                       -1.198e-02  5.637e-03  -2.125   0.0341 *  
Gendermale                 2.435e-01  9.849e-02   2.472   0.0138 *  
ORdate_year               -2.322e-01  4.063e-02  -5.714 1.94e-08 ***
Hypertension.compositeyes -2.375e-01  1.292e-01  -1.838   0.0666 .  
DiabetesStatusDiabetes    -6.732e-02  1.092e-01  -0.617   0.5378    
SmokerStatusEx-smoker      7.512e-02  9.692e-02   0.775   0.4387    
SmokerStatusNever smoked   2.284e-01  1.434e-01   1.593   0.1119    
Med.Statin.LLDyes         -1.495e-01  1.010e-01  -1.480   0.1394    
Med.all.antiplateletyes    1.235e-01  1.541e-01   0.801   0.4235    
GFR_MDRD                   2.685e-04  2.420e-03   0.111   0.9117    
BMI                       -1.346e-02  1.155e-02  -1.165   0.2445    
MedHx_CVDyes              -1.570e-02  9.116e-02  -0.172   0.8633    
stenose50-70%             -3.589e-01  6.008e-01  -0.597   0.5505    
stenose70-90%             -3.064e-01  5.577e-01  -0.549   0.5830    
stenose90-99%             -2.365e-01  5.560e-01  -0.425   0.6708    
stenose100% (Occlusion)   -1.056e+00  7.048e-01  -1.499   0.1346    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.944 on 476 degrees of freedom
Multiple R-squared:  0.155, Adjusted R-squared:  0.1248 
F-statistic: 5.135 on 17 and 476 DF,  p-value: 2.17e-10

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MAC_SMC_ratio_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MAC_SMC_ratio_rank 
Effect size...............: 0.217845 
Standard error............: 0.039715 
Odds ratio (effect size)..: 1.243 
Lower 95% CI..............: 1.15 
Upper 95% CI..............: 1.344 
T-value...................: 5.485155 
P-value...................: 6.719875e-08 
R^2.......................: 0.154968 
Adjusted r^2..............: 0.124788 
Sample size of AE DB......: 2423 
Sample size of model......: 494 
Missing data %............: 79.61205 

- processing VesselDensity_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   463.7343       0.3103      -0.2315  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3250 -0.6474  0.0106  0.6218  2.5297 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.218e+02  8.620e+01   4.893 1.37e-06 ***
currentDF[, TRAIT]        -4.850e-02  5.471e-02  -0.887   0.3758    
Age                       -9.513e-03  5.860e-03  -1.623   0.1052    
Gendermale                 3.285e-01  1.016e-01   3.235   0.0013 ** 
ORdate_year               -2.100e-01  4.302e-02  -4.880 1.46e-06 ***
Hypertension.compositeyes -1.645e-01  1.355e-01  -1.214   0.2254    
DiabetesStatusDiabetes    -3.384e-02  1.148e-01  -0.295   0.7683    
SmokerStatusEx-smoker      9.358e-02  1.014e-01   0.923   0.3567    
SmokerStatusNever smoked   2.664e-01  1.497e-01   1.780   0.0758 .  
Med.Statin.LLDyes         -1.516e-01  1.052e-01  -1.442   0.1500    
Med.all.antiplateletyes    1.357e-01  1.616e-01   0.840   0.4015    
GFR_MDRD                   6.123e-04  2.560e-03   0.239   0.8111    
BMI                       -1.108e-02  1.208e-02  -0.917   0.3595    
MedHx_CVDyes               3.668e-02  9.504e-02   0.386   0.6997    
stenose50-70%             -5.382e-01  6.214e-01  -0.866   0.3869    
stenose70-90%             -2.824e-01  5.775e-01  -0.489   0.6251    
stenose90-99%             -2.830e-01  5.758e-01  -0.491   0.6233    
stenose100% (Occlusion)   -1.043e+00  7.302e-01  -1.429   0.1538    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9771 on 469 degrees of freedom
Multiple R-squared:  0.1035,    Adjusted R-squared:  0.07105 
F-statistic: 3.186 on 17 and 469 DF,  p-value: 2.002e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' VesselDensity_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: VesselDensity_rank 
Effect size...............: -0.048502 
Standard error............: 0.054711 
Odds ratio (effect size)..: 0.953 
Lower 95% CI..............: 0.856 
Upper 95% CI..............: 1.06 
T-value...................: -0.886513 
P-value...................: 0.3757955 
R^2.......................: 0.103542 
Adjusted r^2..............: 0.071048 
Sample size of AE DB......: 2423 
Sample size of model......: 487 
Missing data %............: 79.90095 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "T-value", "P-value", "r^2", "r^2_adj", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`T-value` <- as.numeric(GLM.results$`T-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2` <- as.numeric(GLM.results$`r^2`)
GLM.results$`r^2_adj` <- as.numeric(GLM.results$`r^2_adj`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
library(openxlsx)
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Con.Multi.Protein.PlaquePhenotypes.RANK.MODEL2.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Con.Multi.PlaquePheno")
# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

Binary plaque traits

Analysis of binary plaque traits as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 16, nrow = 0))
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(TRAITS.BIN)) {
    TRAIT = TRAITS.BIN[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M2) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    ### univariate
    fit <- glm(as.factor(currentDF[,TRAIT]) ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year + 
                Hypertension.composite + DiabetesStatus + SmokerStatus + 
                Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
                MedHx_CVD + stenose, 
              data  =  currentDF, family = binomial(link = "logit"))
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 16, nrow = 0))
    GLM.results.TEMP[1,] = GLM.BIN(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing CalcificationPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + ORdate_year + SmokerStatus, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]                       Age               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked  
               279.63668                  -0.39476                   0.02869                  -0.14023                  -0.41699                  -0.46274  

Degrees of Freedom: 1025 Total (i.e. Null);  1020 Residual
Null Deviance:      1420 
Residual Deviance: 1308     AIC: 1320

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.863  -1.045  -0.608   1.074   2.130  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               257.844061  50.214433   5.135 2.82e-07 ***
currentDF[, PROTEIN]       -0.402700   0.075598  -5.327 9.99e-08 ***
Age                         0.029437   0.008526   3.453 0.000555 ***
Gendermale                 -0.003628   0.150954  -0.024 0.980824    
ORdate_year                -0.129597   0.025058  -5.172 2.32e-07 ***
Hypertension.compositeyes   0.283761   0.205758   1.379 0.167863    
DiabetesStatusDiabetes     -0.231758   0.164388  -1.410 0.158591    
SmokerStatusEx-smoker      -0.428649   0.155564  -2.755 0.005861 ** 
SmokerStatusNever smoked   -0.502689   0.218425  -2.301 0.021368 *  
Med.Statin.LLDyes          -0.024746   0.165034  -0.150 0.880809    
Med.all.antiplateletyes    -0.052996   0.228424  -0.232 0.816534    
GFR_MDRD                    0.001570   0.003596   0.437 0.662445    
BMI                         0.021001   0.018720   1.122 0.261931    
MedHx_CVDyes               -0.040669   0.140089  -0.290 0.771581    
stenose50-70%              -0.823178   0.929921  -0.885 0.376042    
stenose70-90%              -0.353208   0.888418  -0.398 0.690948    
stenose90-99%              -0.317638   0.889813  -0.357 0.721113    
stenose100% (Occlusion)     0.802490   1.222297   0.657 0.511475    
stenose50-99%             -14.187677 432.155336  -0.033 0.973810    
stenose70-99%              -0.451708   1.232581  -0.366 0.714012    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1420.3  on 1025  degrees of freedom
Residual deviance: 1294.3  on 1006  degrees of freedom
AIC: 1334.3

Number of Fisher Scoring iterations: 13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' CalcificationPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: CalcificationPlaque 
Effect size...............: -0.4027 
Standard error............: 0.075598 
Odds ratio (effect size)..: 0.669 
Lower 95% CI..............: 0.576 
Upper 95% CI..............: 0.775 
Z-value...................: -5.32687 
P-value...................: 9.991985e-08 
Hosmer and Lemeshow r^2...: 0.088671 
Cox and Snell r^2.........: 0.115512 
Nagelkerke's pseudo r^2...: 0.154119 
Sample size of AE DB......: 2423 
Sample size of model......: 1026 
Missing data %............: 57.6558 

- processing CollagenPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    ORdate_year + SmokerStatus + BMI + MedHx_CVD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked                       BMI  
               -82.29156                  -0.31120                   0.04123                  -0.38704                  -0.66237                   0.04011  
            MedHx_CVDyes  
                 0.24788  

Degrees of Freedom: 1026 Total (i.e. Null);  1020 Residual
Null Deviance:      1049 
Residual Deviance: 1021     AIC: 1035

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3321   0.4334   0.6127   0.7234   1.1601  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -3.689e+01  9.545e+02  -0.039 0.969169    
currentDF[, PROTEIN]      -3.104e-01  8.728e-02  -3.556 0.000377 ***
Age                        1.523e-02  9.880e-03   1.541 0.123267    
Gendermale                 3.495e-02  1.787e-01   0.196 0.844926    
ORdate_year                2.524e-02  2.928e-02   0.862 0.388654    
Hypertension.compositeyes  2.493e-01  2.289e-01   1.089 0.276119    
DiabetesStatusDiabetes     7.073e-02  1.979e-01   0.358 0.720716    
SmokerStatusEx-smoker     -4.601e-01  1.902e-01  -2.419 0.015552 *  
SmokerStatusNever smoked  -7.831e-01  2.492e-01  -3.142 0.001676 ** 
Med.Statin.LLDyes         -8.771e-04  1.935e-01  -0.005 0.996383    
Med.all.antiplateletyes    2.678e-01  2.604e-01   1.029 0.303619    
GFR_MDRD                   5.127e-03  4.253e-03   1.206 0.227994    
BMI                        4.255e-02  2.333e-02   1.824 0.068186 .  
MedHx_CVDyes               2.191e-01  1.637e-01   1.339 0.180703    
stenose50-70%             -1.490e+01  9.527e+02  -0.016 0.987519    
stenose70-90%             -1.519e+01  9.527e+02  -0.016 0.987282    
stenose90-99%             -1.529e+01  9.527e+02  -0.016 0.987198    
stenose100% (Occlusion)    3.121e-02  1.235e+03   0.000 0.999980    
stenose50-99%             -2.727e-01  1.512e+03   0.000 0.999856    
stenose70-99%             -1.484e+01  9.527e+02  -0.016 0.987573    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1048.5  on 1026  degrees of freedom
Residual deviance: 1006.6  on 1007  degrees of freedom
AIC: 1046.6

Number of Fisher Scoring iterations: 15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' CollagenPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: CollagenPlaque 
Effect size...............: -0.310382 
Standard error............: 0.087283 
Odds ratio (effect size)..: 0.733 
Lower 95% CI..............: 0.618 
Upper 95% CI..............: 0.87 
Z-value...................: -3.55603 
P-value...................: 0.0003765011 
Hosmer and Lemeshow r^2...: 0.040027 
Cox and Snell r^2.........: 0.040043 
Nagelkerke's pseudo r^2...: 0.06259 
Sample size of AE DB......: 2423 
Sample size of model......: 1027 
Missing data %............: 57.61453 

- processing Fat10Perc


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + SmokerStatus, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]                       Age                Gendermale               ORdate_year     SmokerStatusEx-smoker  
               469.37418                   0.45540                   0.01347                   0.86049                  -0.23404                  -0.29641  
SmokerStatusNever smoked  
                 0.29609  

Degrees of Freedom: 1026 Total (i.e. Null);  1020 Residual
Null Deviance:      1209 
Residual Deviance: 1092     AIC: 1106

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.6326  -0.9680   0.5857   0.7829   1.6994  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               484.672877 355.498772   1.363   0.1728    
currentDF[, PROTEIN]        0.447618   0.086377   5.182 2.19e-07 ***
Age                         0.015842   0.009283   1.707   0.0879 .  
Gendermale                  0.870259   0.163696   5.316 1.06e-07 ***
ORdate_year                -0.235162   0.030057  -7.824 5.12e-15 ***
Hypertension.compositeyes  -0.053017   0.230251  -0.230   0.8179    
DiabetesStatusDiabetes     -0.183150   0.181689  -1.008   0.3134    
SmokerStatusEx-smoker      -0.316266   0.174529  -1.812   0.0700 .  
SmokerStatusNever smoked    0.288237   0.255876   1.126   0.2600    
Med.Statin.LLDyes          -0.049076   0.191425  -0.256   0.7977    
Med.all.antiplateletyes     0.096033   0.259188   0.371   0.7110    
GFR_MDRD                    0.001989   0.003985   0.499   0.6176    
BMI                         0.005657   0.020516   0.276   0.7828    
MedHx_CVDyes                0.093233   0.157184   0.593   0.5531    
stenose50-70%             -13.345325 350.353303  -0.038   0.9696    
stenose70-90%             -13.480479 350.353191  -0.038   0.9693    
stenose90-99%             -13.551667 350.353198  -0.039   0.9691    
stenose100% (Occlusion)   -14.180536 350.353926  -0.040   0.9677    
stenose50-99%             -14.930710 350.355179  -0.043   0.9660    
stenose70-99%             -13.822004 350.354155  -0.039   0.9685    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1209.2  on 1026  degrees of freedom
Residual deviance: 1082.9  on 1007  degrees of freedom
AIC: 1122.9

Number of Fisher Scoring iterations: 13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Fat10Perc ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Fat10Perc 
Effect size...............: 0.447618 
Standard error............: 0.086377 
Odds ratio (effect size)..: 1.565 
Lower 95% CI..............: 1.321 
Upper 95% CI..............: 1.853 
Z-value...................: 5.182132 
P-value...................: 2.193639e-07 
Hosmer and Lemeshow r^2...: 0.104428 
Cox and Snell r^2.........: 0.115698 
Nagelkerke's pseudo r^2...: 0.167211 
Sample size of AE DB......: 2423 
Sample size of model......: 1027 
Missing data %............: 57.61453 

- processing IPH


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year + BMI + MedHx_CVD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale           ORdate_year                   BMI          MedHx_CVDyes  
           392.07230               0.18061               0.50160              -0.19581               0.02969               0.39131  

Degrees of Freedom: 1024 Total (i.e. Null);  1019 Residual
Null Deviance:      1371 
Residual Deviance: 1281     AIC: 1293

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.1701  -1.1386   0.6982   0.9617   1.7551  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               413.430677  53.512385   7.726 1.11e-14 ***
currentDF[, PROTEIN]        0.180008   0.075716   2.377 0.017434 *  
Age                         0.010033   0.008479   1.183 0.236689    
Gendermale                  0.545667   0.152016   3.590 0.000331 ***
ORdate_year                -0.206531   0.026700  -7.735 1.03e-14 ***
Hypertension.compositeyes  -0.112636   0.207286  -0.543 0.586867    
DiabetesStatusDiabetes     -0.113506   0.165535  -0.686 0.492907    
SmokerStatusEx-smoker      -0.097149   0.158542  -0.613 0.540032    
SmokerStatusNever smoked   -0.141723   0.218025  -0.650 0.515672    
Med.Statin.LLDyes          -0.086084   0.170254  -0.506 0.613122    
Med.all.antiplateletyes     0.103732   0.232980   0.445 0.656148    
GFR_MDRD                   -0.002822   0.003613  -0.781 0.434817    
BMI                         0.036544   0.019035   1.920 0.054876 .  
MedHx_CVDyes                0.365201   0.141153   2.587 0.009674 ** 
stenose50-70%              -0.401826   0.943263  -0.426 0.670111    
stenose70-90%              -0.391222   0.909306  -0.430 0.667020    
stenose90-99%              -0.317648   0.911397  -0.349 0.727443    
stenose100% (Occlusion)    -0.745875   1.137193  -0.656 0.511894    
stenose50-99%               0.123165   1.360810   0.091 0.927883    
stenose70-99%               1.975403   1.425834   1.385 0.165919    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1371.2  on 1024  degrees of freedom
Residual deviance: 1268.6  on 1005  degrees of freedom
AIC: 1308.6

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IPH ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IPH 
Effect size...............: 0.180008 
Standard error............: 0.075716 
Odds ratio (effect size)..: 1.197 
Lower 95% CI..............: 1.032 
Upper 95% CI..............: 1.389 
Z-value...................: 2.377427 
P-value...................: 0.0174339 
Hosmer and Lemeshow r^2...: 0.074795 
Cox and Snell r^2.........: 0.095211 
Nagelkerke's pseudo r^2...: 0.12909 
Sample size of AE DB......: 2423 
Sample size of model......: 1025 
Missing data %............: 57.69707 

- processing MAC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet, 
    family = binomial(link = "logit"), data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]                Gendermale               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked  
               275.73528                   0.22784                   0.50126                  -0.13759                   0.05857                   0.42075  
       Med.Statin.LLDyes   Med.all.antiplateletyes  
                 0.40047                  -0.33729  

Degrees of Freedom: 1022 Total (i.e. Null);  1015 Residual
Null Deviance:      1417 
Residual Deviance: 1359     AIC: 1375

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.903  -1.130   0.754   1.097   1.650  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               296.254795  50.487265   5.868 4.41e-09 ***
currentDF[, PROTEIN]        0.230423   0.072546   3.176 0.001492 ** 
Age                        -0.009277   0.008169  -1.136 0.256081    
Gendermale                  0.507404   0.147625   3.437 0.000588 ***
ORdate_year                -0.146960   0.025176  -5.837 5.30e-09 ***
Hypertension.compositeyes  -0.018654   0.198510  -0.094 0.925134    
DiabetesStatusDiabetes     -0.028077   0.159451  -0.176 0.860227    
SmokerStatusEx-smoker       0.113143   0.150717   0.751 0.452835    
SmokerStatusNever smoked    0.509672   0.214258   2.379 0.017370 *  
Med.Statin.LLDyes           0.378901   0.161396   2.348 0.018892 *  
Med.all.antiplateletyes    -0.419125   0.227897  -1.839 0.065901 .  
GFR_MDRD                    0.001073   0.003467   0.310 0.756838    
BMI                        -0.016377   0.018281  -0.896 0.370346    
MedHx_CVDyes                0.147434   0.136619   1.079 0.280517    
stenose50-70%              -0.680770   0.923420  -0.737 0.460985    
stenose70-90%              -0.715597   0.889289  -0.805 0.421002    
stenose90-99%              -0.798488   0.890683  -0.896 0.369991    
stenose100% (Occlusion)    -1.742277   1.149497  -1.516 0.129599    
stenose50-99%              -0.131148   1.354973  -0.097 0.922893    
stenose70-99%               0.356396   1.186652   0.300 0.763919    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1417.5  on 1022  degrees of freedom
Residual deviance: 1350.2  on 1003  degrees of freedom
AIC: 1390.2

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MAC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MAC_binned 
Effect size...............: 0.230423 
Standard error............: 0.072546 
Odds ratio (effect size)..: 1.259 
Lower 95% CI..............: 1.092 
Upper 95% CI..............: 1.452 
Z-value...................: 3.176236 
P-value...................: 0.001491997 
Hosmer and Lemeshow r^2...: 0.047428 
Cox and Snell r^2.........: 0.063603 
Nagelkerke's pseudo r^2...: 0.084824 
Sample size of AE DB......: 2423 
Sample size of model......: 1023 
Missing data %............: 57.77961 

- processing SMC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + SmokerStatus, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]                       Age                Gendermale     SmokerStatusEx-smoker  SmokerStatusNever smoked  
                 2.86041                  -0.28454                  -0.02413                  -0.37184                  -0.06239                  -0.42455  

Degrees of Freedom: 1022 Total (i.e. Null);  1017 Residual
Null Deviance:      1260 
Residual Deviance: 1218     AIC: 1230

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0646  -1.2798   0.7265   0.8731   1.3692  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -21.133458  52.552076  -0.402 0.687579    
currentDF[, PROTEIN]       -0.284484   0.078214  -3.637 0.000276 ***
Age                        -0.021624   0.009007  -2.401 0.016362 *  
Gendermale                 -0.400820   0.164887  -2.431 0.015062 *  
ORdate_year                 0.011380   0.026223   0.434 0.664310    
Hypertension.compositeyes   0.176586   0.212257   0.832 0.405441    
DiabetesStatusDiabetes      0.007316   0.171510   0.043 0.965977    
SmokerStatusEx-smoker      -0.030192   0.165026  -0.183 0.854833    
SmokerStatusNever smoked   -0.416898   0.222200  -1.876 0.060624 .  
Med.Statin.LLDyes           0.020226   0.171804   0.118 0.906284    
Med.all.antiplateletyes    -0.121723   0.238580  -0.510 0.609914    
GFR_MDRD                    0.005240   0.003756   1.395 0.163024    
BMI                        -0.002086   0.020132  -0.104 0.917473    
MedHx_CVDyes               -0.055130   0.148005  -0.372 0.709529    
stenose50-70%               0.281200   0.883275   0.318 0.750211    
stenose70-90%               0.529893   0.845581   0.627 0.530881    
stenose90-99%               0.833372   0.847648   0.983 0.325530    
stenose100% (Occlusion)     0.459584   1.110889   0.414 0.679088    
stenose50-99%              14.334778 428.022224   0.033 0.973283    
stenose70-99%               0.328315   1.165197   0.282 0.778122    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1260.0  on 1022  degrees of freedom
Residual deviance: 1204.9  on 1003  degrees of freedom
AIC: 1244.9

Number of Fisher Scoring iterations: 13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' SMC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: SMC_binned 
Effect size...............: -0.284484 
Standard error............: 0.078214 
Odds ratio (effect size)..: 0.752 
Lower 95% CI..............: 0.645 
Upper 95% CI..............: 0.877 
Z-value...................: -3.637273 
P-value...................: 0.0002755402 
Hosmer and Lemeshow r^2...: 0.043715 
Cox and Snell r^2.........: 0.052418 
Nagelkerke's pseudo r^2...: 0.074016 
Sample size of AE DB......: 2423 
Sample size of model......: 1023 
Missing data %............: 57.77961 

Analysis of MCP1_rank.

- processing CalcificationPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ ORdate_year + DiabetesStatus + 
    GFR_MDRD + MedHx_CVD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
           (Intercept)             ORdate_year  DiabetesStatusDiabetes                GFR_MDRD            MedHx_CVDyes  
            -5.235e+02               2.619e-01              -4.535e-01              -9.264e-03              -3.696e-01  

Degrees of Freedom: 497 Total (i.e. Null);  493 Residual
Null Deviance:      675.4 
Residual Deviance: 656.8    AIC: 666.8

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7543  -1.2079   0.8134   1.0099   1.6284  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)   
(Intercept)               -5.303e+02  1.846e+02  -2.872  0.00408 **
currentDF[, PROTEIN]      -9.703e-02  9.764e-02  -0.994  0.32037   
Age                        1.444e-03  1.244e-02   0.116  0.90761   
Gendermale                -6.259e-02  2.178e-01  -0.287  0.77380   
ORdate_year                2.642e-01  9.214e-02   2.868  0.00414 **
Hypertension.compositeyes  3.948e-01  2.795e-01   1.413  0.15772   
DiabetesStatusDiabetes    -5.263e-01  2.397e-01  -2.196  0.02808 * 
SmokerStatusEx-smoker     -1.944e-01  2.133e-01  -0.911  0.36216   
SmokerStatusNever smoked  -9.473e-02  3.207e-01  -0.295  0.76768   
Med.Statin.LLDyes         -1.919e-01  2.227e-01  -0.861  0.38897   
Med.all.antiplateletyes    2.845e-01  3.414e-01   0.833  0.40477   
GFR_MDRD                  -9.088e-03  5.390e-03  -1.686  0.09180 . 
BMI                        1.066e-02  2.573e-02   0.414  0.67859   
MedHx_CVDyes              -3.417e-01  2.018e-01  -1.693  0.09049 . 
stenose50-70%              1.416e+00  1.348e+00   1.050  0.29354   
stenose70-90%              1.678e+00  1.259e+00   1.333  0.18247   
stenose90-99%              1.412e+00  1.254e+00   1.126  0.26026   
stenose100% (Occlusion)    1.621e+00  1.604e+00   1.011  0.31222   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 675.45  on 497  degrees of freedom
Residual deviance: 648.38  on 480  degrees of freedom
AIC: 684.38

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' CalcificationPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: CalcificationPlaque 
Effect size...............: -0.097028 
Standard error............: 0.097644 
Odds ratio (effect size)..: 0.908 
Lower 95% CI..............: 0.749 
Upper 95% CI..............: 1.099 
Z-value...................: -0.993689 
P-value...................: 0.3203742 
Hosmer and Lemeshow r^2...: 0.04007 
Cox and Snell r^2.........: 0.052897 
Nagelkerke's pseudo r^2...: 0.071252 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing CollagenPlaque


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    ORdate_year + SmokerStatus + Med.all.antiplatelet, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
             (Intercept)      currentDF[, PROTEIN]               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked   Med.all.antiplateletyes  
               -800.8702                   -0.5054                    0.4003                   -0.5831                   -0.9310                    0.7596  

Degrees of Freedom: 495 Total (i.e. Null);  490 Residual
Null Deviance:      493.1 
Residual Deviance: 447.1    AIC: 459.1

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3991   0.2993   0.4921   0.6733   1.3455  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -7.590e+02  8.436e+02  -0.900 0.368269    
currentDF[, PROTEIN]      -4.958e-01  1.301e-01  -3.812 0.000138 ***
Age                       -5.619e-03  1.617e-02  -0.347 0.728273    
Gendermale                -1.393e-01  2.861e-01  -0.487 0.626335    
ORdate_year                3.866e-01  1.171e-01   3.302 0.000961 ***
Hypertension.compositeyes  2.724e-01  3.500e-01   0.778 0.436329    
DiabetesStatusDiabetes     1.981e-01  3.234e-01   0.612 0.540222    
SmokerStatusEx-smoker     -5.865e-01  2.850e-01  -2.058 0.039624 *  
SmokerStatusNever smoked  -9.821e-01  3.912e-01  -2.510 0.012068 *  
Med.Statin.LLDyes         -9.019e-02  2.759e-01  -0.327 0.743778    
Med.all.antiplateletyes    8.581e-01  4.047e-01   2.120 0.033973 *  
GFR_MDRD                  -2.424e-03  7.057e-03  -0.344 0.731196    
BMI                       -9.001e-03  3.494e-02  -0.258 0.796738    
MedHx_CVDyes               7.111e-03  2.589e-01   0.027 0.978092    
stenose50-70%             -1.253e+01  8.103e+02  -0.015 0.987662    
stenose70-90%             -1.352e+01  8.103e+02  -0.017 0.986683    
stenose90-99%             -1.400e+01  8.103e+02  -0.017 0.986217    
stenose100% (Occlusion)   -1.323e+01  8.103e+02  -0.016 0.986975    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 493.05  on 495  degrees of freedom
Residual deviance: 439.04  on 478  degrees of freedom
AIC: 475.04

Number of Fisher Scoring iterations: 14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' CollagenPlaque ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: CollagenPlaque 
Effect size...............: -0.495808 
Standard error............: 0.130055 
Odds ratio (effect size)..: 0.609 
Lower 95% CI..............: 0.472 
Upper 95% CI..............: 0.786 
Z-value...................: -3.812285 
P-value...................: 0.0001376877 
Hosmer and Lemeshow r^2...: 0.10955 
Cox and Snell r^2.........: 0.103179 
Nagelkerke's pseudo r^2...: 0.163795 
Sample size of AE DB......: 2423 
Sample size of model......: 496 
Missing data %............: 79.52951 

- processing Fat10Perc


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + Hypertension.composite + SmokerStatus, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
              (Intercept)       currentDF[, PROTEIN]                 Gendermale  Hypertension.compositeyes      SmokerStatusEx-smoker   SmokerStatusNever smoked  
                   0.8092                     0.6602                     0.6928                     0.6592                    -0.6083                     0.1413  

Degrees of Freedom: 497 Total (i.e. Null);  492 Residual
Null Deviance:      491.1 
Residual Deviance: 444.9    AIC: 456.9

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5848   0.3017   0.4903   0.6709   1.8103  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -3.019e+02  8.644e+02  -0.349   0.7269    
currentDF[, PROTEIN]       6.900e-01  1.329e-01   5.190 2.11e-07 ***
Age                        2.784e-03  1.595e-02   0.175   0.8614    
Gendermale                 6.538e-01  2.651e-01   2.467   0.0136 *  
ORdate_year                1.572e-01  1.183e-01   1.328   0.1841    
Hypertension.compositeyes  6.489e-01  3.426e-01   1.894   0.0582 .  
DiabetesStatusDiabetes    -3.041e-01  2.996e-01  -1.015   0.3102    
SmokerStatusEx-smoker     -6.573e-01  2.800e-01  -2.347   0.0189 *  
SmokerStatusNever smoked   4.369e-02  4.552e-01   0.096   0.9235    
Med.Statin.LLDyes         -2.220e-01  2.967e-01  -0.748   0.4545    
Med.all.antiplateletyes    2.654e-01  4.143e-01   0.641   0.5218    
GFR_MDRD                   1.690e-03  7.138e-03   0.237   0.8128    
BMI                        3.527e-02  3.295e-02   1.070   0.2844    
MedHx_CVDyes               1.223e-01  2.549e-01   0.480   0.6313    
stenose50-70%             -1.438e+01  8.312e+02  -0.017   0.9862    
stenose70-90%             -1.327e+01  8.312e+02  -0.016   0.9873    
stenose90-99%             -1.361e+01  8.312e+02  -0.016   0.9869    
stenose100% (Occlusion)   -1.294e+01  8.312e+02  -0.016   0.9876    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 491.11  on 497  degrees of freedom
Residual deviance: 435.50  on 480  degrees of freedom
AIC: 471.5

Number of Fisher Scoring iterations: 14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Fat10Perc ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Fat10Perc 
Effect size...............: 0.689959 
Standard error............: 0.132948 
Odds ratio (effect size)..: 1.994 
Lower 95% CI..............: 1.536 
Upper 95% CI..............: 2.587 
Z-value...................: 5.1897 
P-value...................: 2.106334e-07 
Hosmer and Lemeshow r^2...: 0.113222 
Cox and Snell r^2.........: 0.105647 
Nagelkerke's pseudo r^2...: 0.168498 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing IPH


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ Age + Gender + 
    DiabetesStatus + BMI + MedHx_CVD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
           (Intercept)                     Age              Gendermale  DiabetesStatusDiabetes                     BMI            MedHx_CVDyes  
              -1.99101                 0.01776                 0.74177                -0.50330                 0.05039                 0.34743  

Degrees of Freedom: 497 Total (i.e. Null);  492 Residual
Null Deviance:      552.3 
Residual Deviance: 530.6    AIC: 542.6

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0930   0.4579   0.6185   0.7655   1.4577  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)   
(Intercept)               -44.157516 210.353643  -0.210  0.83373   
currentDF[, PROTEIN]        0.085258   0.112450   0.758  0.44834   
Age                         0.013062   0.014168   0.922  0.35654   
Gendermale                  0.764000   0.235270   3.247  0.00116 **
ORdate_year                 0.020756   0.104972   0.198  0.84326   
Hypertension.compositeyes   0.238795   0.310574   0.769  0.44196   
DiabetesStatusDiabetes     -0.517784   0.264433  -1.958  0.05022 . 
SmokerStatusEx-smoker      -0.079166   0.246460  -0.321  0.74805   
SmokerStatusNever smoked    0.053141   0.367384   0.145  0.88499   
Med.Statin.LLDyes          -0.087080   0.260840  -0.334  0.73850   
Med.all.antiplateletyes    -0.106642   0.399317  -0.267  0.78942   
GFR_MDRD                   -0.005579   0.006259  -0.891  0.37278   
BMI                         0.050000   0.029351   1.704  0.08847 . 
MedHx_CVDyes                0.344835   0.224565   1.536  0.12464   
stenose50-70%               1.271129   1.377715   0.923  0.35620   
stenose70-90%               1.170764   1.265627   0.925  0.35494   
stenose90-99%               1.367189   1.262889   1.083  0.27899   
stenose100% (Occlusion)     1.478726   1.723795   0.858  0.39099   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 552.26  on 497  degrees of freedom
Residual deviance: 526.41  on 480  degrees of freedom
AIC: 562.41

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IPH ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IPH 
Effect size...............: 0.085258 
Standard error............: 0.11245 
Odds ratio (effect size)..: 1.089 
Lower 95% CI..............: 0.874 
Upper 95% CI..............: 1.358 
Z-value...................: 0.758181 
P-value...................: 0.4483429 
Hosmer and Lemeshow r^2...: 0.046812 
Cox and Snell r^2.........: 0.050589 
Nagelkerke's pseudo r^2...: 0.075495 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing MAC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Gender + ORdate_year + Med.Statin.LLD + GFR_MDRD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]            Gendermale           ORdate_year     Med.Statin.LLDyes              GFR_MDRD  
          -762.20937               0.39750               0.32386               0.38053               0.51246              -0.00836  

Degrees of Freedom: 493 Total (i.e. Null);  488 Residual
Null Deviance:      671.2 
Residual Deviance: 630.4    AIC: 642.4

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0233  -1.1555   0.7355   0.9909   1.5585  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -7.459e+02  5.422e+02  -1.376 0.168912    
currentDF[, PROTEIN]       3.810e-01  1.016e-01   3.748 0.000178 ***
Age                       -1.768e-02  1.269e-02  -1.393 0.163596    
Gendermale                 3.458e-01  2.195e-01   1.575 0.115240    
ORdate_year                3.798e-01  9.574e-02   3.967 7.28e-05 ***
Hypertension.compositeyes  5.242e-02  2.887e-01   0.182 0.855941    
DiabetesStatusDiabetes    -1.422e-01  2.464e-01  -0.577 0.563990    
SmokerStatusEx-smoker      5.878e-02  2.183e-01   0.269 0.787743    
SmokerStatusNever smoked   1.942e-01  3.266e-01   0.595 0.552050    
Med.Statin.LLDyes          4.288e-01  2.239e-01   1.915 0.055488 .  
Med.all.antiplateletyes   -1.192e-01  3.515e-01  -0.339 0.734579    
GFR_MDRD                  -9.966e-03  5.527e-03  -1.803 0.071365 .  
BMI                       -3.345e-03  2.565e-02  -0.130 0.896243    
MedHx_CVDyes               1.279e-01  2.039e-01   0.627 0.530510    
stenose50-70%             -1.355e+01  5.071e+02  -0.027 0.978679    
stenose70-90%             -1.325e+01  5.071e+02  -0.026 0.979153    
stenose90-99%             -1.355e+01  5.071e+02  -0.027 0.978687    
stenose100% (Occlusion)   -1.393e+01  5.071e+02  -0.027 0.978091    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 671.15  on 493  degrees of freedom
Residual deviance: 623.39  on 476  degrees of freedom
AIC: 659.39

Number of Fisher Scoring iterations: 13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MAC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MAC_binned 
Effect size...............: 0.380999 
Standard error............: 0.101645 
Odds ratio (effect size)..: 1.464 
Lower 95% CI..............: 1.199 
Upper 95% CI..............: 1.786 
Z-value...................: 3.748326 
P-value...................: 0.0001780186 
Hosmer and Lemeshow r^2...: 0.071171 
Cox and Snell r^2.........: 0.092166 
Nagelkerke's pseudo r^2...: 0.124048 
Sample size of AE DB......: 2423 
Sample size of model......: 494 
Missing data %............: 79.61205 

- processing SMC_binned


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age            Gendermale  
             3.58159              -0.46804              -0.03057              -0.73346  

Degrees of Freedom: 495 Total (i.e. Null);  492 Residual
Null Deviance:      595.8 
Residual Deviance: 558.3    AIC: 566.3

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3253  -1.1830   0.6182   0.8468   1.4395  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -2.655e+02  5.405e+02  -0.491  0.62331    
currentDF[, PROTEIN]      -4.611e-01  1.126e-01  -4.094 4.23e-05 ***
Age                       -3.691e-02  1.427e-02  -2.587  0.00969 ** 
Gendermale                -8.251e-01  2.669e-01  -3.091  0.00199 ** 
ORdate_year                1.421e-01  1.019e-01   1.395  0.16311    
Hypertension.compositeyes -3.209e-01  3.348e-01  -0.959  0.33780    
DiabetesStatusDiabetes    -2.069e-01  2.620e-01  -0.790  0.42963    
SmokerStatusEx-smoker      2.049e-01  2.393e-01   0.856  0.39174    
SmokerStatusNever smoked  -1.393e-01  3.395e-01  -0.410  0.68158    
Med.Statin.LLDyes         -1.806e-01  2.464e-01  -0.733  0.46353    
Med.all.antiplateletyes   -8.168e-02  3.820e-01  -0.214  0.83070    
GFR_MDRD                  -1.716e-03  5.923e-03  -0.290  0.77209    
BMI                       -2.059e-02  2.927e-02  -0.703  0.48175    
MedHx_CVDyes              -1.088e-01  2.247e-01  -0.484  0.62815    
stenose50-70%             -1.382e+01  5.005e+02  -0.028  0.97797    
stenose70-90%             -1.404e+01  5.005e+02  -0.028  0.97762    
stenose90-99%             -1.391e+01  5.005e+02  -0.028  0.97782    
stenose100% (Occlusion)   -1.486e+01  5.005e+02  -0.030  0.97631    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 595.82  on 495  degrees of freedom
Residual deviance: 547.99  on 478  degrees of freedom
AIC: 583.99

Number of Fisher Scoring iterations: 13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' SMC_binned ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: SMC_binned 
Effect size...............: -0.461087 
Standard error............: 0.112615 
Odds ratio (effect size)..: 0.631 
Lower 95% CI..............: 0.506 
Upper 95% CI..............: 0.786 
Z-value...................: -4.094379 
P-value...................: 4.233022e-05 
Hosmer and Lemeshow r^2...: 0.080275 
Cox and Snell r^2.........: 0.091928 
Nagelkerke's pseudo r^2...: 0.131479 
Sample size of AE DB......: 2423 
Sample size of model......: 496 
Missing data %............: 79.52951 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "Z-value", "P-value", "r^2_l", "r^2_cs", "r^2_nagelkerke", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`Z-value` <- as.numeric(GLM.results$`Z-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2_l` <- as.numeric(GLM.results$`r^2_l`)
GLM.results$`r^2_cs` <- as.numeric(GLM.results$`r^2_cs`)
GLM.results$`r^2_nagelkerke` <- as.numeric(GLM.results$`r^2_nagelkerke`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Bin.Multi.Protein.PlaquePhenotypes.RANK.MODEL2.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Bin.Multi.PlaquePheno")

# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

B. Cross-sectional analysis symptoms

We will perform a cross-sectional analysis between plaque MCP1 levels and the ‘clinical status’ of the plaque in terms of presence of patients’ symptoms (symptomatic vs. asymptomatic). The symptoms of interest are:

  • stroke
  • TIA
  • retinal infarction
  • amaurosis fugax
  • asymptomatic

Model 1

In this model we correct for Age, Gender, and year of surgery.

GLM.results <- data.frame(matrix(NA, ncol = 16, nrow = 0))
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  TRAIT = "AsymptSympt"
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M1) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    ### univariate
     # + Hypertension.composite + DiabetesStatus + SmokerCurrent + 
     #            Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
     #            CAD_history + Stroke_history + Peripheral.interv + stenose
    fit <- glm(as.factor(currentDF[,TRAIT]) ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year, 
              data  =  currentDF, family = binomial(link = "logit"))
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 16, nrow = 0))
    GLM.results.TEMP[1,] = GLM.BIN(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }

Analysis of MCP1_pg_ml_2015_rank.

- processing AsymptSympt


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]                   Age            Gendermale           ORdate_year  
          -124.83943               0.27031               0.02877              -0.51749               0.06249  

Degrees of Freedom: 1198 Total (i.e. Null);  1194 Residual
Null Deviance:      827.2 
Residual Deviance: 797.3    AIC: 807.3

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5524   0.3495   0.4339   0.5243   0.8965  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)   
(Intercept)          -124.83943   68.66012  -1.818  0.06903 . 
currentDF[, PROTEIN]    0.27031    0.10237   2.641  0.00828 **
Age                     0.02877    0.01023   2.811  0.00493 **
Gendermale             -0.51749    0.22116  -2.340  0.01929 * 
ORdate_year             0.06249    0.03424   1.825  0.06796 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 827.22  on 1198  degrees of freedom
Residual deviance: 797.31  on 1194  degrees of freedom
AIC: 807.31

Number of Fisher Scoring iterations: 5

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' AsymptSympt ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: AsymptSympt 
Effect size...............: 0.270307 
Standard error............: 0.102367 
Odds ratio (effect size)..: 1.31 
Lower 95% CI..............: 1.072 
Upper 95% CI..............: 1.602 
Z-value...................: 2.640561 
P-value...................: 0.008276887 
Hosmer and Lemeshow r^2...: 0.036146 
Cox and Snell r^2.........: 0.02463 
Nagelkerke's pseudo r^2...: 0.049419 
Sample size of AE DB......: 2423 
Sample size of model......: 1199 
Missing data %............: 50.51589 

Analysis of MCP1_rank.

- processing AsymptSympt


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    ORdate_year, family = binomial(link = "logit"), data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]           ORdate_year  
           -473.3895                0.3371                0.2371  

Degrees of Freedom: 555 Total (i.e. Null);  553 Residual
Null Deviance:      479 
Residual Deviance: 468.7    AIC: 474.7

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3911   0.4414   0.5340   0.6219   1.0452  

Coefficients:
                       Estimate Std. Error z value Pr(>|z|)   
(Intercept)          -480.62215  225.42835  -2.132  0.03300 * 
currentDF[, PROTEIN]    0.36235    0.12346   2.935  0.00334 **
Age                     0.01562    0.01370   1.140  0.25440   
Gendermale             -0.29174    0.27407  -1.064  0.28711   
ORdate_year             0.24030    0.11253   2.135  0.03272 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 478.98  on 555  degrees of freedom
Residual deviance: 466.39  on 551  degrees of freedom
AIC: 476.39

Number of Fisher Scoring iterations: 4

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' AsymptSympt ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: AsymptSympt 
Effect size...............: 0.362354 
Standard error............: 0.123463 
Odds ratio (effect size)..: 1.437 
Lower 95% CI..............: 1.128 
Upper 95% CI..............: 1.83 
Z-value...................: 2.934919 
P-value...................: 0.003336347 
Hosmer and Lemeshow r^2...: 0.026279 
Cox and Snell r^2.........: 0.022385 
Nagelkerke's pseudo r^2...: 0.038764 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "Z-value", "P-value", "r^2_l", "r^2_cs", "r^2_nagelkerke", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`Z-value` <- as.numeric(GLM.results$`Z-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2_l` <- as.numeric(GLM.results$`r^2_l`)
GLM.results$`r^2_cs` <- as.numeric(GLM.results$`r^2_cs`)
GLM.results$`r^2_nagelkerke` <- as.numeric(GLM.results$`r^2_nagelkerke`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Bin.Uni.Protein.RANK.Symptoms.MODEL1.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Bin.Uni.Symptoms")

# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

Model 2

In this model we correct for Age, Gender, Hypertension status, Diabetes status, current smoker status, lipid-lowering drugs (LLDs), antiplatelet medication, eGFR (MDRD), BMI, MedHx_CVD (combination of CAD history, stroke history, and peripheral interventions), and stenosis..


GLM.results <- data.frame(matrix(NA, ncol = 16, nrow = 0))
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  TRAIT = "AsymptSympt"
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M2) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    ### univariate

    fit <- glm(as.factor(currentDF[,TRAIT]) ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year + 
                 Hypertension.composite + DiabetesStatus + SmokerStatus + 
                 Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
                 MedHx_CVD + stenose, 
               data  =  currentDF, family = binomial(link = "logit"))
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 16, nrow = 0))
    GLM.results.TEMP[1,] = GLM.BIN(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }

Analysis of MCP1_pg_ml_2015_rank.

- processing AsymptSympt


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Med.all.antiplatelet + stenose, 
    family = binomial(link = "logit"), data = currentDF)

Coefficients:
            (Intercept)     currentDF[, PROTEIN]                      Age               Gendermale              ORdate_year  Med.all.antiplateletyes  
             -145.03274                  0.32511                  0.02147                 -0.48726                  0.08040                 -0.91400  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)            stenose50-99%            stenose70-99%  
              -13.07895                -14.66964                -14.29506                  0.03649                -15.84146                 -0.73998  

Degrees of Freedom: 1037 Total (i.e. Null);  1026 Residual
Null Deviance:      726.9 
Residual Deviance: 679.9    AIC: 703.9

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.2614   0.2818   0.4201   0.5408   1.0245  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)   
(Intercept)               -1.486e+02  9.514e+02  -0.156  0.87591   
currentDF[, PROTEIN]       3.063e-01  1.122e-01   2.729  0.00636 **
Age                        2.888e-02  1.278e-02   2.260  0.02385 * 
Gendermale                -4.336e-01  2.409e-01  -1.800  0.07187 . 
ORdate_year                8.214e-02  3.946e-02   2.082  0.03739 * 
Hypertension.compositeyes -3.362e-01  3.458e-01  -0.972  0.33083   
DiabetesStatusDiabetes    -4.766e-02  2.441e-01  -0.195  0.84521   
SmokerStatusEx-smoker     -3.345e-01  2.345e-01  -1.426  0.15373   
SmokerStatusNever smoked  -2.811e-03  3.574e-01  -0.008  0.99372   
Med.Statin.LLDyes         -2.461e-01  2.688e-01  -0.916  0.35983   
Med.all.antiplateletyes   -9.270e-01  4.806e-01  -1.929  0.05372 . 
GFR_MDRD                   6.238e-03  5.532e-03   1.128  0.25950   
BMI                       -8.706e-03  2.805e-02  -0.310  0.75628   
MedHx_CVDyes               9.157e-02  2.110e-01   0.434  0.66436   
stenose50-70%             -1.317e+01  9.481e+02  -0.014  0.98891   
stenose70-90%             -1.473e+01  9.481e+02  -0.016  0.98760   
stenose90-99%             -1.437e+01  9.481e+02  -0.015  0.98791   
stenose100% (Occlusion)   -1.476e-01  1.228e+03   0.000  0.99990   
stenose50-99%             -1.613e+01  9.481e+02  -0.017  0.98642   
stenose70-99%             -7.880e-01  1.183e+03  -0.001  0.99947   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 726.94  on 1037  degrees of freedom
Residual deviance: 673.02  on 1018  degrees of freedom
AIC: 713.02

Number of Fisher Scoring iterations: 15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' AsymptSympt ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: AsymptSympt 
Effect size...............: 0.306293 
Standard error............: 0.112242 
Odds ratio (effect size)..: 1.358 
Lower 95% CI..............: 1.09 
Upper 95% CI..............: 1.693 
Z-value...................: 2.728861 
P-value...................: 0.006355351 
Hosmer and Lemeshow r^2...: 0.074179 
Cox and Snell r^2.........: 0.050624 
Nagelkerke's pseudo r^2...: 0.100528 
Sample size of AE DB......: 2423 
Sample size of model......: 1038 
Missing data %............: 57.16054 

Analysis of MCP1_rank.

- processing AsymptSympt


Call:  glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    ORdate_year + Med.Statin.LLD, family = binomial(link = "logit"), 
    data = currentDF)

Coefficients:
         (Intercept)  currentDF[, PROTEIN]           ORdate_year     Med.Statin.LLDyes  
           -529.0018                0.3015                0.2650               -0.4436  

Degrees of Freedom: 497 Total (i.e. Null);  494 Residual
Null Deviance:      442.3 
Residual Deviance: 431.4    AIC: 439.4

Call:
glm(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, family = binomial(link = "logit"), 
    data = currentDF)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.4505   0.3657   0.5162   0.6508   1.2570  

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)   
(Intercept)               -5.467e+02  1.385e+03  -0.395  0.69306   
currentDF[, PROTEIN]       3.487e-01  1.293e-01   2.697  0.00701 **
Age                        1.924e-02  1.635e-02   1.177  0.23928   
Gendermale                -3.424e-01  2.977e-01  -1.150  0.25001   
ORdate_year                2.808e-01  1.220e-01   2.301  0.02139 * 
Hypertension.compositeyes -5.366e-01  4.410e-01  -1.217  0.22366   
DiabetesStatusDiabetes     1.954e-01  3.251e-01   0.601  0.54780   
SmokerStatusEx-smoker     -1.745e-01  2.861e-01  -0.610  0.54197   
SmokerStatusNever smoked  -4.281e-01  4.090e-01  -1.047  0.29516   
Med.Statin.LLDyes         -3.682e-01  3.131e-01  -1.176  0.23961   
Med.all.antiplateletyes   -4.933e-01  5.140e-01  -0.960  0.33722   
GFR_MDRD                   9.396e-03  7.081e-03   1.327  0.18455   
BMI                        1.197e-02  3.425e-02   0.349  0.72676   
MedHx_CVDyes               8.287e-02  2.647e-01   0.313  0.75424   
stenose50-70%             -1.392e+01  1.363e+03  -0.010  0.99185   
stenose70-90%             -1.531e+01  1.363e+03  -0.011  0.99104   
stenose90-99%             -1.494e+01  1.363e+03  -0.011  0.99126   
stenose100% (Occlusion)   -8.723e-02  1.712e+03   0.000  0.99996   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 442.26  on 497  degrees of freedom
Residual deviance: 417.29  on 480  degrees of freedom
AIC: 453.29

Number of Fisher Scoring iterations: 15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' AsymptSympt ' ...
Collecting data...
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: AsymptSympt 
Effect size...............: 0.348715 
Standard error............: 0.129319 
Odds ratio (effect size)..: 1.417 
Lower 95% CI..............: 1.1 
Upper 95% CI..............: 1.826 
Z-value...................: 2.696545 
P-value...................: 0.007006285 
Hosmer and Lemeshow r^2...: 0.056471 
Cox and Snell r^2.........: 0.048913 
Nagelkerke's pseudo r^2...: 0.083108 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "Z-value", "P-value", "r^2_l", "r^2_cs", "r^2_nagelkerke", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`Z-value` <- as.numeric(GLM.results$`Z-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2_l` <- as.numeric(GLM.results$`r^2_l`)
GLM.results$`r^2_cs` <- as.numeric(GLM.results$`r^2_cs`)
GLM.results$`r^2_nagelkerke` <- as.numeric(GLM.results$`r^2_nagelkerke`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)

# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Bin.Multi.Protein.RANK.Symptoms.MODEL2.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Bin.Multi.Symptoms")

# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

C. Longitudinal analysis secondary clinical outcome

For the longitudinal analyses of plaque MCP1 levels and secondary cardiovascular events over a three-year follow-up period.

The primary outcome is defined as “a composite of fatal or non-fatal myocardial infarction, fatal or non-fatal stroke, ruptured aortic aneurysm, fatal cardiac failure, coronary or peripheral interventions, leg amputation due to vascular causes, and cardiovascular death”, i.e. major adverse cardiovascular events (MACE). Variable: epmajor.3years, these include: - myocardial infarction (MI) - cerebral infarction (CVA/stroke) - cardiovascular death (exact cause to be investigated) - cerebral bleeding (CVA/stroke) - fatal myocardial infarction (MI) - fatal cerebral infarction - fatal cerebral bleeding - sudden death - fatal heart failure - fatal aneurysm rupture - other cardiovascular death..

The secondary outcomes will be

  • incidence of fatal or non-fatal stroke (ischemic and bleeding) - variable: epstroke.3years, these include:
    • cerebral infarction (CVA/stroke)
    • cerebral bleeding (CVA/stroke)
    • fatal cerebral infarction
    • fatal cerebral bleeding.
  • incidence of acute coronary events (fatal or non-fatal myocardial infarction, coronary interventions) - variable: epcoronary.3years, these include:
    • myocardial infarction (MI)
    • coronary angioplasty (PCI/PTCA)
    • cardiovascular death (exact cause to be investigated)
    • coronary bypass (CABG)
    • fatal myocardial infarction (MI)
    • sudden death.
  • cardiovascular death - variable: epcvdeath.3years, these include:
    • cardiovascular death (exact cause to be investigated)
    • fatal myocardial infarction (MI)
    • fatal cerebral infarction
    • fatal cerebral bleeding
    • sudden death
    • fatal heart failure
    • fatal aneurysm rupture
    • other cardiovascular death..

30- and 90-days FU events

We will use 3-year follow-up, but we will also calculate 30 days and 90 days follow-up ‘time-to-event’ variables. On average there are 365.25 days in a year. We can calculate 30-days and 90-days follow-up time based on the three years follow-up.

cutt.off.30days = (1/365.25) * 30
cutt.off.90days = (1/365.25) * 90

# Fix maximum FU of 30 and 90 days
AEDB <- AEDB %>%
  mutate(
    FU.cutt.off.30days = ifelse(max.followup <= cutt.off.30days, max.followup, cutt.off.30days),
    FU.cutt.off.90days = ifelse(max.followup <= cutt.off.90days, max.followup, cutt.off.90days)
  ) 

AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", 
                                      "max.followup", 
                                      "FU.cutt.off.3years",
                                      "FU.cutt.off.30days", 
                                      "FU.cutt.off.90days"))
require(labelled)
AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)

DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)


rm(AEDB.temp)

AEDB.CEA <- AEDB.CEA %>%
  mutate(
    FU.cutt.off.30days = ifelse(max.followup <= cutt.off.30days, max.followup, cutt.off.30days),
    FU.cutt.off.90days = ifelse(max.followup <= cutt.off.90days, max.followup, cutt.off.90days)
  ) 

AEDB.CEA.temp <- subset(AEDB.CEA,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", 
                                      "max.followup", 
                                      "FU.cutt.off.3years",
                                      "FU.cutt.off.30days", 
                                      "FU.cutt.off.90days"))
require(labelled)
AEDB.CEA.temp$Gender <- to_factor(AEDB.CEA.temp$Gender)
AEDB.CEA.temp$Hospital <- to_factor(AEDB.CEA.temp$Hospital)
AEDB.CEA.temp$Artery_summary <- to_factor(AEDB.CEA.temp$Artery_summary)

DT::datatable(AEDB.CEA.temp[1:10,], caption = "Excerpt of the whole AEDB.CEA.", rownames = FALSE)


rm(AEDB.CEA.temp)

Here we will calculate the new 30- and 90-days follow-up of the events and their event-times of interest:

  • MACE (epmajor.3years)
  • Stroke (epstroke.3years)
  • Coronary events (epcoronary.3years)
  • Cardiovascular death (epcvdeath.3years)
avg_days_in_year = 365.25
cutt.off.30days.scaled <- cutt.off.30days * 365.25
cutt.off.90days.scaled <- cutt.off.90days * 365.25
# Event times
AEDB <- AEDB %>%
  mutate(
    ep_major_t_30days = ifelse(ep_major_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                               ep_major_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_stroke_t_30days = ifelse(ep_stroke_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                ep_stroke_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_coronary_t_30days = ifelse(ep_coronary_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                  ep_coronary_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_cvdeath_t_30days = ifelse(ep_cvdeath_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                 ep_cvdeath_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_major_t_90days = ifelse(ep_major_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                               ep_major_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_stroke_t_90days = ifelse(ep_stroke_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                ep_stroke_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_coronary_t_90days = ifelse(ep_coronary_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                  ep_coronary_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_cvdeath_t_90days = ifelse(ep_cvdeath_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                 ep_cvdeath_t_3years * avg_days_in_year, cutt.off.90days.scaled)
  ) 

AEDB.CEA <- AEDB.CEA %>%
  mutate(
    ep_major_t_30days = ifelse(ep_major_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                               ep_major_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_stroke_t_30days = ifelse(ep_stroke_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                ep_stroke_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_coronary_t_30days = ifelse(ep_coronary_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                  ep_coronary_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_cvdeath_t_30days = ifelse(ep_cvdeath_t_3years * avg_days_in_year <= cutt.off.30days.scaled, 
                                 ep_cvdeath_t_3years * avg_days_in_year, cutt.off.30days.scaled),
    ep_major_t_90days = ifelse(ep_major_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                               ep_major_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_stroke_t_90days = ifelse(ep_stroke_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                ep_stroke_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_coronary_t_90days = ifelse(ep_coronary_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                  ep_coronary_t_3years * avg_days_in_year, cutt.off.90days.scaled),
    ep_cvdeath_t_90days = ifelse(ep_cvdeath_t_3years * avg_days_in_year <= cutt.off.90days.scaled, 
                                 ep_cvdeath_t_3years * avg_days_in_year, cutt.off.90days.scaled)
  ) 

attach(AEDB)
AEDB[,"epmajor.30days"] <- AEDB$epmajor.3years
AEDB$epmajor.30days[epmajor.3years == 1 & ep_major_t_3years > cutt.off.30days] <- 0

AEDB[,"epstroke.30days"] <- AEDB$epstroke.3years
AEDB$epstroke.30days[epstroke.3years == 1 & ep_stroke_t_3years > cutt.off.30days] <- 0

AEDB[,"epcoronary.30days"] <- AEDB$epcoronary.3years
AEDB$epcoronary.30days[epcoronary.3years == 1 & ep_coronary_t_3years > cutt.off.30days] <- 0

AEDB[,"epcvdeath.30days"] <- AEDB$epcvdeath.3years
AEDB$epcvdeath.30days[epcvdeath.3years == 1 & ep_cvdeath_t_3years > cutt.off.30days] <- 0

AEDB[,"epmajor.90days"] <- AEDB$epmajor.3years
AEDB$epmajor.90days[epmajor.3years == 1 & ep_major_t_3years > cutt.off.90days] <- 0

AEDB[,"epstroke.90days"] <- AEDB$epstroke.3years
AEDB$epstroke.90days[epstroke.3years == 1 & ep_stroke_t_3years > cutt.off.90days] <- 0

AEDB[,"epcoronary.90days"] <- AEDB$epcoronary.3years
AEDB$epcoronary.90days[epcoronary.3years == 1 & ep_coronary_t_3years > cutt.off.90days] <- 0

AEDB[,"epcvdeath.90days"] <- AEDB$epcvdeath.3years
AEDB$epcvdeath.90days[epcvdeath.3years == 1 & ep_cvdeath_t_3years > cutt.off.90days] <- 0

detach(AEDB)

AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", 
                                      "epmajor.3years", "epstroke.3years", "epcoronary.3years", "epcvdeath.3years",
                                      "epmajor.30days", "epstroke.30days", "epcoronary.30days", "epcvdeath.30days",
                                      "epmajor.90days", "epstroke.90days", "epcoronary.90days", "epcvdeath.90days"))
require(labelled)
AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)

DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)


rm(AEDB.temp)

attach(AEDB.CEA)
AEDB.CEA[,"epmajor.30days"] <- AEDB.CEA$epmajor.3years
AEDB.CEA$epmajor.30days[epmajor.3years == 1 & ep_major_t_3years > cutt.off.30days] <- 0

AEDB.CEA[,"epstroke.30days"] <- AEDB.CEA$epstroke.3years
AEDB.CEA$epstroke.30days[epstroke.3years == 1 & ep_stroke_t_3years > cutt.off.30days] <- 0

AEDB.CEA[,"epcoronary.30days"] <- AEDB.CEA$epcoronary.3years
AEDB.CEA$epcoronary.30days[epcoronary.3years == 1 & ep_coronary_t_3years > cutt.off.30days] <- 0

AEDB.CEA[,"epcvdeath.30days"] <- AEDB.CEA$epcvdeath.3years
AEDB.CEA$epcvdeath.30days[epcvdeath.3years == 1 & ep_cvdeath_t_3years > cutt.off.30days] <- 0

AEDB.CEA[,"epmajor.90days"] <- AEDB.CEA$epmajor.3years
AEDB.CEA$epmajor.90days[epmajor.3years == 1 & ep_major_t_3years > cutt.off.90days] <- 0

AEDB.CEA[,"epstroke.90days"] <- AEDB.CEA$epstroke.3years
AEDB.CEA$epstroke.90days[epstroke.3years == 1 & ep_stroke_t_3years > cutt.off.90days] <- 0

AEDB.CEA[,"epcoronary.90days"] <- AEDB.CEA$epcoronary.3years
AEDB.CEA$epcoronary.90days[epcoronary.3years == 1 & ep_coronary_t_3years > cutt.off.90days] <- 0

AEDB.CEA[,"epcvdeath.90days"] <- AEDB.CEA$epcvdeath.3years
AEDB.CEA$epcvdeath.90days[epcvdeath.3years == 1 & ep_cvdeath_t_3years > cutt.off.90days] <- 0

detach(AEDB.CEA)

AEDB.CEA.temp <- subset(AEDB.CEA,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", 
                                      "epmajor.3years", "epstroke.3years", "epcoronary.3years", "epcvdeath.3years",
                                      "epmajor.30days", "epstroke.30days", "epcoronary.30days", "epcvdeath.30days",
                                      "epmajor.90days", "epstroke.90days", "epcoronary.90days", "epcvdeath.90days"))
require(labelled)
AEDB.CEA.temp$Gender <- to_factor(AEDB.CEA.temp$Gender)
AEDB.CEA.temp$Hospital <- to_factor(AEDB.CEA.temp$Hospital)
AEDB.CEA.temp$Artery_summary <- to_factor(AEDB.CEA.temp$Artery_summary)

DT::datatable(AEDB.CEA.temp[1:10,], caption = "Excerpt of the whole AEDB.CEA.", rownames = FALSE)


rm(AEDB.CEA.temp)

Sanity checks

First we do some sanity checks and inventory the time-to-event and event variables.

# Reference: https://bioconductor.org/packages/devel/bioc/vignettes/MultiAssayExperiment/inst/doc/QuickStartMultiAssay.html
# If you want to suppress warnings and messages when installing/loading packages
# suppressPackageStartupMessages({})
install.packages.auto("survival")
Loading required package: survival
install.packages.auto("survminer")
Loading required package: survminer
install.packages.auto("Hmisc")
Loading required package: Hmisc
Loading required package: lattice
Loading required package: Formula

Attaching package: ‘Hmisc’

The following objects are masked from ‘package:dplyr’:

    src, summarize

The following objects are masked from ‘package:base’:

    format.pval, units
cat("* Creating function to summarize Cox regression and prepare container for results.")
* Creating function to summarize Cox regression and prepare container for results.
# Function to get summary statistics from Cox regression model
COX.STAT <- function(coxfit, DATASET, OUTCOME, protein){
  cat("Summarizing Cox regression results for '", protein ,"' and its association to '",OUTCOME,"' in '",DATASET,"'.\n")
  if (nrow(summary(coxfit)$coefficients) == 1) {
    output = c(protein, rep(NA,8))
    cat("Model not fitted; probably singular.\n")
  }else {
    cat("Collecting data.\n\n")
    cox.sum <- summary(coxfit)
    cox.effectsize = cox.sum$coefficients[1,1]
    cox.SE = cox.sum$coefficients[1,3]
    cox.HReffect = cox.sum$coefficients[1,2]
    cox.CI_low = exp(cox.effectsize - 1.96 * cox.SE)
    cox.CI_up = exp(cox.effectsize + 1.96 * cox.SE)
    cox.zvalue = cox.sum$coefficients[1,4]
    cox.pvalue = cox.sum$coefficients[1,5]
    cox.sample_size = cox.sum$n
    cox.nevents = cox.sum$nevent
    
    output = c(DATASET, OUTCOME, protein, cox.effectsize, cox.SE, cox.HReffect, cox.CI_low, cox.CI_up, cox.zvalue, cox.pvalue, cox.sample_size, cox.nevents)
    cat("We have collected the following:\n")
    cat("Dataset used..............:", DATASET, "\n")
    cat("Outcome analyzed..........:", OUTCOME, "\n")
    cat("Protein...................:", protein, "\n")
    cat("Effect size...............:", round(cox.effectsize, 6), "\n")
    cat("Standard error............:", round(cox.SE, 6), "\n")
    cat("Odds ratio (effect size)..:", round(cox.HReffect, 3), "\n")
    cat("Lower 95% CI..............:", round(cox.CI_low, 3), "\n")
    cat("Upper 95% CI..............:", round(cox.CI_up, 3), "\n")
    cat("T-value...................:", round(cox.zvalue, 6), "\n")
    cat("P-value...................:", signif(cox.pvalue, 8), "\n")
    cat("Sample size in model......:", cox.sample_size, "\n")
    cat("Number of events..........:", cox.nevents, "\n")
  }
  return(output)
  print(output)
} 

times = c("ep_major_t_3years", 
          "ep_stroke_t_3years", "ep_coronary_t_3years", "ep_cvdeath_t_3years")

endpoints = c("epmajor.3years", 
              "epstroke.3years", "epcoronary.3years", "epcvdeath.3years")

cat("* Check the cases per event type - for sanity.")
* Check the cases per event type - for sanity.
for (events in endpoints){
  require(labelled)
  print(paste0("Printing the summary of: ",events))
  # print(summary(AEDB.CEA[,events]))
  print(table(AEDB.CEA[,events]))
}
[1] "Printing the summary of: epmajor.3years"

   0    1 
2035  265 
[1] "Printing the summary of: epstroke.3years"

   0    1 
2171  130 
[1] "Printing the summary of: epcoronary.3years"

   0    1 
2119  182 
[1] "Printing the summary of: epcvdeath.3years"

   0    1 
2210   90 
cat("* Check distribution of events over time - for sanity.")
* Check distribution of events over time - for sanity.
for (eventtimes in times){
  print(paste0("Printing the summary of: ",eventtimes))
  print(summary(AEDB.CEA[,eventtimes]))
}
[1] "Printing the summary of: ep_major_t_3years"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   2.710   3.000   2.573   3.000   3.000     125 
[1] "Printing the summary of: ep_stroke_t_3years"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   2.877   3.000   2.624   3.000   3.000     125 
[1] "Printing the summary of: ep_coronary_t_3years"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   2.784   3.000   2.622   3.000   3.000     125 
[1] "Printing the summary of: ep_cvdeath_t_3years"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
0.00274 2.91233 3.00000 2.70902 3.00000 3.00000     125 
for (eventtime in times){
  
  print(paste0("Printing the distribution of: ",eventtime))
  p <- gghistogram(AEDB.CEA, x = eventtime, y = "..count..",
              main = eventtime, bins = 15, 
              xlab = "year", color = uithof_color[16], fill = uithof_color[16], ggtheme = theme_minimal()) 
 print(p)
 ggsave(file = paste0(QC_loc, "/",Today,".AEDB.CEA.EventDistributionPerYear.",eventtime,".pdf"), plot = last_plot())
}
[1] "Printing the distribution of: ep_major_t_3years"
[1] "Printing the distribution of: ep_stroke_t_3years"
[1] "Printing the distribution of: ep_coronary_t_3years"
[1] "Printing the distribution of: ep_cvdeath_t_3years"

times30 = c("ep_major_t_30days", 
          "ep_stroke_t_30days", "ep_coronary_t_30days", "ep_cvdeath_t_30days")

endpoints30 = c("epmajor.30days", 
              "epstroke.30days", "epcoronary.30days", "epcvdeath.30days")

cat("* Check the cases per event type - for sanity.")
* Check the cases per event type - for sanity.
for (events in endpoints30){
  print(paste0("Printing the summary of: ",events))
  # print(summary(AEDB.CEA[,events]))
  print(table(AEDB.CEA[,events]))
}
[1] "Printing the summary of: epmajor.30days"

   0    1 
2222   78 
[1] "Printing the summary of: epstroke.30days"

   0    1 
2248   53 
[1] "Printing the summary of: epcoronary.30days"

   0    1 
2267   34 
[1] "Printing the summary of: epcvdeath.30days"

   0    1 
2288   12 
cat("* Check distribution of events over time - for sanity.")
* Check distribution of events over time - for sanity.
for (eventtimes in times30){
  print(paste0("Printing the summary of: ",eventtimes))
  print(summary(AEDB.CEA[,eventtimes]))
}
[1] "Printing the summary of: ep_major_t_30days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   30.00   30.00   29.09   30.00   30.00     125 
[1] "Printing the summary of: ep_stroke_t_30days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   30.00   30.00   29.32   30.00   30.00     125 
[1] "Printing the summary of: ep_coronary_t_30days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   30.00   30.00   29.54   30.00   30.00     125 
[1] "Printing the summary of: ep_cvdeath_t_30days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.001  30.000  30.000  29.854  30.000  30.000     125 
for (eventtime in times30){
  
  print(paste0("Printing the distribution of: ",eventtime))
  p <- gghistogram(AEDB.CEA, x = eventtime, y = "..count..",
              main = eventtime, bins = 15, 
              xlab = "days", color = uithof_color[16], fill = uithof_color[16], ggtheme = theme_minimal()) 
 print(p)
 ggsave(file = paste0(QC_loc, "/",Today,".AEDB.CEA.EventDistributionPer30Days.",eventtime,".pdf"), plot = last_plot())
}
[1] "Printing the distribution of: ep_major_t_30days"
[1] "Printing the distribution of: ep_stroke_t_30days"
[1] "Printing the distribution of: ep_coronary_t_30days"
[1] "Printing the distribution of: ep_cvdeath_t_30days"

times90 = c("ep_major_t_90days", 
          "ep_stroke_t_90days", "ep_coronary_t_90days", "ep_cvdeath_t_90days")

endpoints90 = c("epmajor.90days", 
              "epstroke.90days", "epcoronary.90days", "epcvdeath.90days")

cat("* Check the cases per event type - for sanity.")
* Check the cases per event type - for sanity.
for (events in endpoints90){
  print(paste0("Printing the summary of: ",events))
  # print(summary(AEDB.CEA[,events]))
  print(table(AEDB.CEA[,events]))
}
[1] "Printing the summary of: epmajor.90days"

   0    1 
2206   94 
[1] "Printing the summary of: epstroke.90days"

   0    1 
2241   60 
[1] "Printing the summary of: epcoronary.90days"

   0    1 
2257   44 
[1] "Printing the summary of: epcvdeath.90days"

   0    1 
2281   19 
cat("* Check distribution of events over time - for sanity.")
* Check distribution of events over time - for sanity.
for (eventtimes in times90){
  print(paste0("Printing the summary of: ",eventtimes))
  print(summary(AEDB.CEA[,eventtimes]))
}
[1] "Printing the summary of: ep_major_t_90days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   90.00   90.00   86.75   90.00   90.00     125 
[1] "Printing the summary of: ep_stroke_t_90days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   90.00   90.00   87.51   90.00   90.00     125 
[1] "Printing the summary of: ep_coronary_t_90days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00   90.00   90.00   88.21   90.00   90.00     125 
[1] "Printing the summary of: ep_cvdeath_t_90days"
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.001  90.000  90.000  89.320  90.000  90.000     125 
for (eventtime in times90){
  
  print(paste0("Printing the distribution of: ",eventtime))
  p <- gghistogram(AEDB.CEA, x = eventtime, y = "..count..",
              main = eventtime, bins = 15, 
              xlab = "days", color = uithof_color[16], fill = uithof_color[16], ggtheme = theme_minimal()) 
 print(p)
 ggsave(file = paste0(QC_loc, "/",Today,".AEDB.CEA.EventDistributionPer90Days.",eventtime,".pdf"), plot = last_plot())
}
[1] "Printing the distribution of: ep_major_t_90days"
[1] "Printing the distribution of: ep_stroke_t_90days"
[1] "Printing the distribution of: ep_coronary_t_90days"
[1] "Printing the distribution of: ep_cvdeath_t_90days"

Cox regressions

Let’s perform the actual Cox-regressions. We will apply a couple of models:

  • Model 1: adjusted for age, sex, and year of surgery
  • Model 2: adjusted for age, sex, year of surgery, hypertension, diabetes, smoking, LDL-C levels, lipid-lowering drugs, antiplatelet drugs, eGFR, BMI, history of CVD, level of stenosis

3 years follow-up

MODEL 1

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times)){
  eptime = times[i]
  ep = endpoints[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [years]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 1 (Simple model)
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age+Gender + ORdate_year, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age+Gender + ORdate_year, data = TEMP.DF)

    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         # ylim = c(0.2, 1), xlim = c(0,3), col = c("#595A5C", "#DB003F", "#1290D9"),
         ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [years]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL1.pdf"), height = 12, width = 10, onefile = TRUE)
    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}
* Analyzing the effect of plaque proteins on [epmajor.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 1187, number of events= 140 
   (1236 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)    
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  0.01185   1.01192  0.18373  0.064 0.948575    
Age                                                        0.03489   1.03550  0.01003  3.478 0.000506 ***
Gendermale                                                 0.35203   1.42196  0.20065  1.754 0.079351 .  
ORdate_year                                               -0.02361   0.97667  0.03018 -0.782 0.434149    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]    1.0119     0.9882    0.7059     1.451
Age                                                          1.0355     0.9657    1.0153     1.056
Gendermale                                                   1.4220     0.7033    0.9596     2.107
ORdate_year                                                  0.9767     1.0239    0.9206     1.036

Concordance= 0.589  (se = 0.025 )
Likelihood ratio test= 16.08  on 4 df,   p=0.003
Wald test            = 15.15  on 4 df,   p=0.004
Score (logrank) test = 15.23  on 4 df,   p=0.004


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epmajor.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epmajor.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.01185 
Standard error............: 0.18373 
Odds ratio (effect size)..: 1.012 
Lower 95% CI..............: 0.706 
Upper 95% CI..............: 1.451 
T-value...................: 0.064496 
P-value...................: 0.9485755 
Sample size in model......: 1187 
Number of events..........: 140 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 549, number of events= 70 
   (1874 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -0.22427   0.79910  0.24647 -0.910   0.3629  
Age                                                        0.02639   1.02674  0.01475  1.789   0.0736 .
Gendermale                                                 0.87183   2.39128  0.34246  2.546   0.0109 *
ORdate_year                                               -0.03519   0.96542  0.11300 -0.311   0.7555  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]    0.7991     1.2514    0.4929     1.295
Age                                                          1.0267     0.9740    0.9975     1.057
Gendermale                                                   2.3913     0.4182    1.2222     4.679
ORdate_year                                                  0.9654     1.0358    0.7736     1.205

Concordance= 0.618  (se = 0.034 )
Likelihood ratio test= 12.21  on 4 df,   p=0.02
Wald test            = 10.74  on 4 df,   p=0.03
Score (logrank) test = 11.16  on 4 df,   p=0.02


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epmajor.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epmajor.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.224272 
Standard error............: 0.246475 
Odds ratio (effect size)..: 0.799 
Lower 95% CI..............: 0.493 
Upper 95% CI..............: 1.295 
T-value...................: -0.909918 
P-value...................: 0.3628658 
Sample size in model......: 549 
Number of events..........: 70 
* Analyzing the effect of plaque proteins on [epstroke.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 1187, number of events= 74 
   (1236 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)   
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  0.05159   1.05295  0.25152  0.205  0.83747   
Age                                                        0.03709   1.03779  0.01382  2.684  0.00728 **
Gendermale                                                 0.09193   1.09629  0.26020  0.353  0.72385   
ORdate_year                                               -0.04704   0.95405  0.04159 -1.131  0.25806   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]     1.053     0.9497    0.6432     1.724
Age                                                           1.038     0.9636    1.0101     1.066
Gendermale                                                    1.096     0.9122    0.6583     1.826
ORdate_year                                                   0.954     1.0482    0.8794     1.035

Concordance= 0.591  (se = 0.035 )
Likelihood ratio test= 8.33  on 4 df,   p=0.08
Wald test            = 7.9  on 4 df,   p=0.1
Score (logrank) test = 7.96  on 4 df,   p=0.09


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epstroke.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epstroke.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.051594 
Standard error............: 0.251515 
Odds ratio (effect size)..: 1.053 
Lower 95% CI..............: 0.643 
Upper 95% CI..............: 1.724 
T-value...................: 0.205134 
P-value...................: 0.8374673 
Sample size in model......: 1187 
Number of events..........: 74 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 549, number of events= 36 
   (1874 observations deleted due to missingness)

                                                               coef exp(coef)  se(coef)      z Pr(>|z|)
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -0.366525  0.693139  0.345901 -1.060    0.289
Age                                                        0.007526  1.007554  0.019822  0.380    0.704
Gendermale                                                 0.332937  1.395059  0.403044  0.826    0.409
ORdate_year                                               -0.014799  0.985310  0.157445 -0.094    0.925

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]    0.6931     1.4427    0.3519     1.365
Age                                                          1.0076     0.9925    0.9692     1.047
Gendermale                                                   1.3951     0.7168    0.6332     3.074
ORdate_year                                                  0.9853     1.0149    0.7237     1.341

Concordance= 0.571  (se = 0.043 )
Likelihood ratio test= 1.96  on 4 df,   p=0.7
Wald test            = 1.92  on 4 df,   p=0.8
Score (logrank) test = 1.93  on 4 df,   p=0.7


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epstroke.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epstroke.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.366525 
Standard error............: 0.345901 
Odds ratio (effect size)..: 0.693 
Lower 95% CI..............: 0.352 
Upper 95% CI..............: 1.365 
T-value...................: -1.059623 
P-value...................: 0.2893161 
Sample size in model......: 549 
Number of events..........: 36 
* Analyzing the effect of plaque proteins on [epcoronary.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 1187, number of events= 91 
   (1236 observations deleted due to missingness)

                                                               coef exp(coef)  se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  0.172342  1.188084  0.225648  0.764   0.4450  
Age                                                        0.008689  1.008727  0.012048  0.721   0.4708  
Gendermale                                                 0.643664  1.903442  0.270491  2.380   0.0173 *
ORdate_year                                               -0.055903  0.945631  0.037238 -1.501   0.1333  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]    1.1881     0.8417    0.7634     1.849
Age                                                          1.0087     0.9913    0.9852     1.033
Gendermale                                                   1.9034     0.5254    1.1202     3.234
ORdate_year                                                  0.9456     1.0575    0.8791     1.017

Concordance= 0.591  (se = 0.031 )
Likelihood ratio test= 9.57  on 4 df,   p=0.05
Wald test            = 8.73  on 4 df,   p=0.07
Score (logrank) test = 8.95  on 4 df,   p=0.06


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epcoronary.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcoronary.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.172342 
Standard error............: 0.225648 
Odds ratio (effect size)..: 1.188 
Lower 95% CI..............: 0.763 
Upper 95% CI..............: 1.849 
T-value...................: 0.763763 
P-value...................: 0.4450084 
Sample size in model......: 1187 
Number of events..........: 91 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 549, number of events= 46 
   (1874 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]  0.24448   1.27695  0.30911  0.791   0.4290  
Age                                                        0.03668   1.03736  0.01872  1.959   0.0501 .
Gendermale                                                 0.92420   2.51986  0.43913  2.105   0.0353 *
ORdate_year                                               -0.23892   0.78748  0.13604 -1.756   0.0790 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]    1.2770     0.7831    0.6967     2.340
Age                                                          1.0374     0.9640    1.0000     1.076
Gendermale                                                   2.5199     0.3968    1.0656     5.959
ORdate_year                                                  0.7875     1.2699    0.6032     1.028

Concordance= 0.652  (se = 0.039 )
Likelihood ratio test= 13.98  on 4 df,   p=0.007
Wald test            = 12.67  on 4 df,   p=0.01
Score (logrank) test = 13.17  on 4 df,   p=0.01


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epcoronary.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcoronary.3years 
Protein...................: MCP1_rank 
Effect size...............: 0.244478 
Standard error............: 0.309109 
Odds ratio (effect size)..: 1.277 
Lower 95% CI..............: 0.697 
Upper 95% CI..............: 2.34 
T-value...................: 0.79091 
P-value...................: 0.4289965 
Sample size in model......: 549 
Number of events..........: 46 
* Analyzing the effect of plaque proteins on [epcvdeath.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 1187, number of events= 45 
   (1236 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)    
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125] -0.11518   0.89120  0.32234 -0.357   0.7208    
Age                                                        0.09047   1.09469  0.02008  4.505 6.63e-06 ***
Gendermale                                                 0.91435   2.49514  0.41402  2.208   0.0272 *  
ORdate_year                                               -0.06875   0.93356  0.05424 -1.267   0.2050    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]    0.8912     1.1221    0.4738     1.676
Age                                                          1.0947     0.9135    1.0524     1.139
Gendermale                                                   2.4951     0.4008    1.1084     5.617
ORdate_year                                                  0.9336     1.0712    0.8394     1.038

Concordance= 0.716  (se = 0.039 )
Likelihood ratio test= 29.09  on 4 df,   p=7e-06
Wald test            = 24.68  on 4 df,   p=6e-05
Score (logrank) test = 25.41  on 4 df,   p=4e-05


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epcvdeath.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcvdeath.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: -0.115182 
Standard error............: 0.322341 
Odds ratio (effect size)..: 0.891 
Lower 95% CI..............: 0.474 
Upper 95% CI..............: 1.676 
T-value...................: -0.357328 
P-value...................: 0.7208462 
Sample size in model......: 1187 
Number of events..........: 45 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year, data = TEMP.DF)

  n= 549, number of events= 26 
   (1874 observations deleted due to missingness)

                                                              coef exp(coef) se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -0.03367   0.96689  0.40417 -0.083   0.9336  
Age                                                        0.05571   1.05729  0.02549  2.185   0.0289 *
Gendermale                                                 1.05290   2.86594  0.61477  1.713   0.0868 .
ORdate_year                                               -0.11039   0.89548  0.18082 -0.611   0.5415  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]    0.9669     1.0342    0.4379     2.135
Age                                                          1.0573     0.9458    1.0058     1.111
Gendermale                                                   2.8659     0.3489    0.8590     9.562
ORdate_year                                                  0.8955     1.1167    0.6283     1.276

Concordance= 0.679  (se = 0.06 )
Likelihood ratio test= 9.52  on 4 df,   p=0.05
Wald test            = 8.25  on 4 df,   p=0.08
Score (logrank) test = 8.62  on 4 df,   p=0.07


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epcvdeath.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcvdeath.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.03367 
Standard error............: 0.40417 
Odds ratio (effect size)..: 0.967 
Lower 95% CI..............: 0.438 
Upper 95% CI..............: 2.135 
T-value...................: -0.083308 
P-value...................: 0.9336068 
Sample size in model......: 549 
Number of events..........: 26 

cat("- Edit the column names...\n")
- Edit the column names...
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
- Correct the variable types...
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
cat("- Writing results to Excel-file...\n")
- Writing results to Excel-file...
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL1.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
- Removing intermediate files...
#rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

#rm(head.style)

MODEL 2

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times)){
  eptime = times[i]
  ep = endpoints[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  #as.integer(TEMP.DF[,ep] == "Excluded")

  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [years]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 2 adjusted for age, sex, hypertension, diabetes, smoking, LDL-C levels, lipid-lowering drugs, antiplatelet drugs, eGFR, BMI, history of CVD, level of stenosis
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)

  
    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         # ylim = c(0.2, 1), xlim = c(0,3), col = c("#595A5C", "#DB003F", "#1290D9"),
         ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [years]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL2.pdf"), height = 12, width = 10, onefile = TRUE)

    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}
* Analyzing the effect of plaque proteins on [epmajor.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 1029, number of events= 115 
   (1394 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)    
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  1.291e-01  1.138e+00  2.002e-01  0.645 0.518966    
Age                                                        3.304e-02  1.034e+00  1.293e-02  2.556 0.010591 *  
Gendermale                                                 3.709e-01  1.449e+00  2.288e-01  1.621 0.105078    
ORdate_year                                               -1.222e-02  9.879e-01  3.470e-02 -0.352 0.724616    
Hypertension.compositeno                                  -4.257e-01  6.533e-01  3.572e-01 -1.192 0.233306    
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA    
DiabetesStatusDiabetes                                    -1.766e-02  9.825e-01  2.237e-01 -0.079 0.937094    
SmokerStatusEx-smoker                                     -5.003e-01  6.063e-01  2.096e-01 -2.387 0.016973 *  
SmokerStatusNever smoked                                  -8.121e-01  4.439e-01  3.418e-01 -2.376 0.017500 *  
Med.Statin.LLDno                                           2.512e-01  1.286e+00  2.183e-01  1.151 0.249766    
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA    
Med.all.antiplateletno                                     4.271e-01  1.533e+00  2.637e-01  1.620 0.105327    
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA    
GFR_MDRD                                                  -1.926e-02  9.809e-01  4.962e-03 -3.880 0.000104 ***
BMI                                                        5.407e-02  1.056e+00  2.610e-02  2.071 0.038324 *  
MedHx_CVDyes                                               5.365e-01  1.710e+00  2.221e-01  2.416 0.015694 *  
stenose0-49%                                              -1.571e+01  1.504e-07  2.447e+03 -0.006 0.994877    
stenose50-70%                                             -8.674e-01  4.200e-01  8.780e-01 -0.988 0.323168    
stenose70-90%                                             -3.100e-01  7.334e-01  7.471e-01 -0.415 0.678201    
stenose90-99%                                             -2.933e-01  7.458e-01  7.560e-01 -0.388 0.698046    
stenose100% (Occlusion)                                   -1.521e-01  8.589e-01  1.253e+00 -0.121 0.903378    
stenoseNA                                                         NA         NA  0.000e+00     NA       NA    
stenose50-99%                                             -1.531e+01  2.252e-07  2.926e+03 -0.005 0.995826    
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA    
stenose99                                                         NA         NA  0.000e+00     NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125] 1.138e+00  8.789e-01   0.76852    1.6846
Age                                                       1.034e+00  9.675e-01   1.00773    1.0601
Gendermale                                                1.449e+00  6.901e-01   0.92531    2.2690
ORdate_year                                               9.879e-01  1.012e+00   0.92291    1.0574
Hypertension.compositeno                                  6.533e-01  1.531e+00   0.32438    1.3157
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    9.825e-01  1.018e+00   0.63374    1.5232
SmokerStatusEx-smoker                                     6.063e-01  1.649e+00   0.40210    0.9143
SmokerStatusNever smoked                                  4.439e-01  2.253e+00   0.22718    0.8674
Med.Statin.LLDno                                          1.286e+00  7.779e-01   0.83813    1.9719
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    1.533e+00  6.524e-01   0.91414    2.5702
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.809e-01  1.019e+00   0.97143    0.9905
BMI                                                       1.056e+00  9.474e-01   1.00291    1.1110
MedHx_CVDyes                                              1.710e+00  5.848e-01   1.10656    2.6424
stenose0-49%                                              1.504e-07  6.648e+06   0.00000       Inf
stenose50-70%                                             4.200e-01  2.381e+00   0.07515    2.3477
stenose70-90%                                             7.334e-01  1.363e+00   0.16959    3.1720
stenose90-99%                                             7.458e-01  1.341e+00   0.16947    3.2821
stenose100% (Occlusion)                                   8.589e-01  1.164e+00   0.07373   10.0065
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                             2.252e-07  4.441e+06   0.00000       Inf
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.698  (se = 0.023 )
Likelihood ratio test= 63.82  on 19 df,   p=9e-07
Wald test            = 58.85  on 19 df,   p=6e-06
Score (logrank) test = 62.26  on 19 df,   p=2e-06


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epmajor.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epmajor.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.129126 
Standard error............: 0.200214 
Odds ratio (effect size)..: 1.138 
Lower 95% CI..............: 0.769 
Upper 95% CI..............: 1.685 
T-value...................: 0.64494 
P-value...................: 0.5189661 
Sample size in model......: 1029 
Number of events..........: 115 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 493, number of events= 61 
   (1930 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -3.920e-01  6.757e-01  2.685e-01 -1.460   0.1443  
Age                                                        3.117e-02  1.032e+00  1.813e-02  1.719   0.0857 .
Gendermale                                                 8.127e-01  2.254e+00  3.652e-01  2.226   0.0260 *
ORdate_year                                               -3.205e-02  9.685e-01  1.249e-01 -0.257   0.7975  
Hypertension.compositeno                                  -7.542e-01  4.704e-01  5.309e-01 -1.421   0.1555  
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA  
DiabetesStatusDiabetes                                     6.309e-01  1.879e+00  2.951e-01  2.138   0.0325 *
SmokerStatusEx-smoker                                     -6.391e-01  5.278e-01  2.880e-01 -2.219   0.0265 *
SmokerStatusNever smoked                                  -3.224e-01  7.244e-01  4.307e-01 -0.748   0.4542  
Med.Statin.LLDno                                           2.275e-01  1.255e+00  2.962e-01  0.768   0.4426  
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA  
Med.all.antiplateletno                                    -1.296e-02  9.871e-01  4.530e-01 -0.029   0.9772  
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA  
GFR_MDRD                                                  -1.091e-02  9.891e-01  6.796e-03 -1.606   0.1083  
BMI                                                        5.177e-03  1.005e+00  3.447e-02  0.150   0.8806  
MedHx_CVDyes                                               5.574e-01  1.746e+00  3.075e-01  1.813   0.0699 .
stenose0-49%                                              -1.651e+01  6.744e-08  3.444e+03 -0.005   0.9962  
stenose50-70%                                             -1.690e+00  1.845e-01  1.448e+00 -1.167   0.2431  
stenose70-90%                                             -7.523e-01  4.713e-01  1.049e+00 -0.717   0.4731  
stenose90-99%                                             -1.050e+00  3.501e-01  1.055e+00 -0.995   0.3198  
stenose100% (Occlusion)                                           NA         NA  0.000e+00     NA       NA  
stenoseNA                                                         NA         NA  0.000e+00     NA       NA  
stenose50-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose99                                                         NA         NA  0.000e+00     NA       NA  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] 6.757e-01  1.480e+00   0.39920     1.144
Age                                                       1.032e+00  9.693e-01   0.99563     1.069
Gendermale                                                2.254e+00  4.436e-01   1.10189     4.611
ORdate_year                                               9.685e-01  1.033e+00   0.75814     1.237
Hypertension.compositeno                                  4.704e-01  2.126e+00   0.16617     1.332
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    1.879e+00  5.321e-01   1.05394     3.351
SmokerStatusEx-smoker                                     5.278e-01  1.895e+00   0.30015     0.928
SmokerStatusNever smoked                                  7.244e-01  1.380e+00   0.31142     1.685
Med.Statin.LLDno                                          1.255e+00  7.965e-01   0.70247     2.244
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    9.871e-01  1.013e+00   0.40623     2.399
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.891e-01  1.011e+00   0.97606     1.002
BMI                                                       1.005e+00  9.948e-01   0.93952     1.075
MedHx_CVDyes                                              1.746e+00  5.727e-01   0.95573     3.190
stenose0-49%                                              6.744e-08  1.483e+07   0.00000       Inf
stenose50-70%                                             1.845e-01  5.420e+00   0.01080     3.151
stenose70-90%                                             4.713e-01  2.122e+00   0.06036     3.679
stenose90-99%                                             3.501e-01  2.857e+00   0.04426     2.768
stenose100% (Occlusion)                                          NA         NA        NA        NA
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                                    NA         NA        NA        NA
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.703  (se = 0.03 )
Likelihood ratio test= 32.87  on 17 df,   p=0.01
Wald test            = 29.3  on 17 df,   p=0.03
Score (logrank) test = 31.16  on 17 df,   p=0.02


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epmajor.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epmajor.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.392011 
Standard error............: 0.268514 
Odds ratio (effect size)..: 0.676 
Lower 95% CI..............: 0.399 
Upper 95% CI..............: 1.144 
T-value...................: -1.459925 
P-value...................: 0.1443106 
Sample size in model......: 493 
Number of events..........: 61 
* Analyzing the effect of plaque proteins on [epstroke.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 1029, number of events= 59 
   (1394 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  1.594e-01  1.173e+00  2.824e-01  0.564   0.5724  
Age                                                        4.416e-02  1.045e+00  1.793e-02  2.462   0.0138 *
Gendermale                                                -4.998e-02  9.513e-01  3.010e-01 -0.166   0.8681  
ORdate_year                                               -3.475e-02  9.658e-01  4.903e-02 -0.709   0.4785  
Hypertension.compositeno                                  -1.230e-03  9.988e-01  4.192e-01 -0.003   0.9977  
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA  
DiabetesStatusDiabetes                                    -2.173e-02  9.785e-01  3.172e-01 -0.068   0.9454  
SmokerStatusEx-smoker                                     -1.136e-01  8.926e-01  2.965e-01 -0.383   0.7015  
SmokerStatusNever smoked                                  -9.518e-01  3.860e-01  5.240e-01 -1.817   0.0693 .
Med.Statin.LLDno                                           3.482e-01  1.417e+00  2.971e-01  1.172   0.2412  
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA  
Med.all.antiplateletno                                     3.779e-01  1.459e+00  3.721e-01  1.016   0.3098  
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA  
GFR_MDRD                                                  -3.561e-03  9.964e-01  7.027e-03 -0.507   0.6124  
BMI                                                        8.022e-02  1.084e+00  3.436e-02  2.335   0.0195 *
MedHx_CVDyes                                               3.650e-01  1.441e+00  2.941e-01  1.241   0.2146  
stenose0-49%                                              -1.549e+01  1.867e-07  3.367e+03 -0.005   0.9963  
stenose50-70%                                             -6.477e-01  5.233e-01  1.173e+00 -0.552   0.5810  
stenose70-90%                                             -4.535e-01  6.354e-01  1.055e+00 -0.430   0.6673  
stenose90-99%                                             -5.009e-01  6.060e-01  1.070e+00 -0.468   0.6396  
stenose100% (Occlusion)                                    3.518e-01  1.422e+00  1.459e+00  0.241   0.8094  
stenoseNA                                                         NA         NA  0.000e+00     NA       NA  
stenose50-99%                                             -1.518e+01  2.547e-07  3.975e+03 -0.004   0.9970  
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose99                                                         NA         NA  0.000e+00     NA       NA  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125] 1.173e+00  8.526e-01   0.67425     2.040
Age                                                       1.045e+00  9.568e-01   1.00905     1.083
Gendermale                                                9.513e-01  1.051e+00   0.52730     1.716
ORdate_year                                               9.658e-01  1.035e+00   0.87735     1.063
Hypertension.compositeno                                  9.988e-01  1.001e+00   0.43921     2.271
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    9.785e-01  1.022e+00   0.52549     1.822
SmokerStatusEx-smoker                                     8.926e-01  1.120e+00   0.49923     1.596
SmokerStatusNever smoked                                  3.860e-01  2.590e+00   0.13823     1.078
Med.Statin.LLDno                                          1.417e+00  7.059e-01   0.79124     2.536
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    1.459e+00  6.853e-01   0.70369     3.026
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.964e-01  1.004e+00   0.98282     1.010
BMI                                                       1.084e+00  9.229e-01   1.01297     1.159
MedHx_CVDyes                                              1.441e+00  6.942e-01   0.80943     2.564
stenose0-49%                                              1.867e-07  5.356e+06   0.00000       Inf
stenose50-70%                                             5.233e-01  1.911e+00   0.05246     5.219
stenose70-90%                                             6.354e-01  1.574e+00   0.08037     5.024
stenose90-99%                                             6.060e-01  1.650e+00   0.07448     4.930
stenose100% (Occlusion)                                   1.422e+00  7.034e-01   0.08147    24.808
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                             2.547e-07  3.926e+06   0.00000       Inf
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.672  (se = 0.034 )
Likelihood ratio test= 23.18  on 19 df,   p=0.2
Wald test            = 21.31  on 19 df,   p=0.3
Score (logrank) test = 22.41  on 19 df,   p=0.3


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epstroke.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epstroke.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.159428 
Standard error............: 0.282444 
Odds ratio (effect size)..: 1.173 
Lower 95% CI..............: 0.674 
Upper 95% CI..............: 2.04 
T-value...................: 0.564459 
P-value...................: 0.5724415 
Sample size in model......: 1029 
Number of events..........: 59 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 493, number of events= 29 
   (1930 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -5.111e-01  5.998e-01  3.922e-01 -1.303    0.192
Age                                                        1.682e-02  1.017e+00  2.487e-02  0.676    0.499
Gendermale                                                 7.422e-02  1.077e+00  4.374e-01  0.170    0.865
ORdate_year                                               -2.613e-02  9.742e-01  1.808e-01 -0.145    0.885
Hypertension.compositeno                                  -8.185e-01  4.411e-01  7.527e-01 -1.087    0.277
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA
DiabetesStatusDiabetes                                     2.130e-01  1.237e+00  4.580e-01  0.465    0.642
SmokerStatusEx-smoker                                     -5.374e-01  5.843e-01  4.196e-01 -1.281    0.200
SmokerStatusNever smoked                                  -3.304e-01  7.186e-01  6.147e-01 -0.537    0.591
Med.Statin.LLDno                                          -6.489e-02  9.372e-01  4.561e-01 -0.142    0.887
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA
Med.all.antiplateletno                                    -8.493e-02  9.186e-01  6.709e-01 -0.127    0.899
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA
GFR_MDRD                                                   2.245e-03  1.002e+00  1.037e-02  0.216    0.829
BMI                                                       -3.808e-03  9.962e-01  4.917e-02 -0.077    0.938
MedHx_CVDyes                                               2.618e-01  1.299e+00  4.162e-01  0.629    0.529
stenose0-49%                                              -1.873e+01  7.320e-09  1.321e+04 -0.001    0.999
stenose50-70%                                             -1.857e+01  8.632e-09  5.072e+03 -0.004    0.997
stenose70-90%                                             -1.307e+00  2.705e-01  1.121e+00 -1.166    0.244
stenose90-99%                                             -1.546e+00  2.130e-01  1.135e+00 -1.362    0.173
stenose100% (Occlusion)                                           NA         NA  0.000e+00     NA       NA
stenoseNA                                                         NA         NA  0.000e+00     NA       NA
stenose50-99%                                                     NA         NA  0.000e+00     NA       NA
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA
stenose99                                                         NA         NA  0.000e+00     NA       NA

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] 5.998e-01  1.667e+00   0.27811     1.294
Age                                                       1.017e+00  9.833e-01   0.96858     1.068
Gendermale                                                1.077e+00  9.285e-01   0.45700     2.538
ORdate_year                                               9.742e-01  1.026e+00   0.68351     1.389
Hypertension.compositeno                                  4.411e-01  2.267e+00   0.10088     1.929
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    1.237e+00  8.081e-01   0.50429     3.036
SmokerStatusEx-smoker                                     5.843e-01  1.712e+00   0.25672     1.330
SmokerStatusNever smoked                                  7.186e-01  1.392e+00   0.21540     2.398
Med.Statin.LLDno                                          9.372e-01  1.067e+00   0.38338     2.291
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    9.186e-01  1.089e+00   0.24662     3.421
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  1.002e+00  9.978e-01   0.98209     1.023
BMI                                                       9.962e-01  1.004e+00   0.90468     1.097
MedHx_CVDyes                                              1.299e+00  7.697e-01   0.57466     2.938
stenose0-49%                                              7.320e-09  1.366e+08   0.00000       Inf
stenose50-70%                                             8.632e-09  1.159e+08   0.00000       Inf
stenose70-90%                                             2.705e-01  3.697e+00   0.03004     2.436
stenose90-99%                                             2.130e-01  4.694e+00   0.02303     1.970
stenose100% (Occlusion)                                          NA         NA        NA        NA
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                                    NA         NA        NA        NA
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.651  (se = 0.051 )
Likelihood ratio test= 9.82  on 17 df,   p=0.9
Wald test            = 7.29  on 17 df,   p=1
Score (logrank) test = 9.15  on 17 df,   p=0.9


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epstroke.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epstroke.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.511114 
Standard error............: 0.392158 
Odds ratio (effect size)..: 0.6 
Lower 95% CI..............: 0.278 
Upper 95% CI..............: 1.294 
T-value...................: -1.303338 
P-value...................: 0.1924592 
Sample size in model......: 493 
Number of events..........: 29 
* Analyzing the effect of plaque proteins on [epcoronary.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 1029, number of events= 78 
   (1394 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)    
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  2.905e-01  1.337e+00  2.410e-01  1.205 0.228034    
Age                                                        3.225e-04  1.000e+00  1.532e-02  0.021 0.983210    
Gendermale                                                 8.268e-01  2.286e+00  3.041e-01  2.719 0.006547 ** 
ORdate_year                                               -4.520e-02  9.558e-01  4.217e-02 -1.072 0.283803    
Hypertension.compositeno                                  -9.704e-01  3.789e-01  5.215e-01 -1.861 0.062793 .  
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA    
DiabetesStatusDiabetes                                    -8.006e-02  9.231e-01  2.760e-01 -0.290 0.771732    
SmokerStatusEx-smoker                                     -6.194e-01  5.383e-01  2.585e-01 -2.396 0.016592 *  
SmokerStatusNever smoked                                  -2.735e-01  7.607e-01  3.654e-01 -0.748 0.454249    
Med.Statin.LLDno                                           5.528e-02  1.057e+00  2.760e-01  0.200 0.841276    
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA    
Med.all.antiplateletno                                     3.320e-01  1.394e+00  3.353e-01  0.990 0.322098    
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA    
GFR_MDRD                                                  -2.003e-02  9.802e-01  5.954e-03 -3.365 0.000766 ***
BMI                                                        1.495e-02  1.015e+00  3.351e-02  0.446 0.655552    
MedHx_CVDyes                                               6.941e-01  2.002e+00  2.795e-01  2.483 0.013015 *  
stenose0-49%                                              -1.602e+01  1.106e-07  3.018e+03 -0.005 0.995765    
stenose50-70%                                             -1.801e+00  1.651e-01  1.427e+00 -1.262 0.206807    
stenose70-90%                                             -2.542e-01  7.756e-01  1.043e+00 -0.244 0.807516    
stenose90-99%                                             -3.387e-01  7.127e-01  1.054e+00 -0.321 0.747924    
stenose100% (Occlusion)                                   -1.545e+01  1.953e-07  2.480e+03 -0.006 0.995030    
stenoseNA                                                         NA         NA  0.000e+00     NA       NA    
stenose50-99%                                              7.799e-01  2.181e+00  1.430e+00  0.545 0.585612    
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA    
stenose99                                                         NA         NA  0.000e+00     NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125] 1.337e+00  7.479e-01   0.83375    2.1442
Age                                                       1.000e+00  9.997e-01   0.97072    1.0308
Gendermale                                                2.286e+00  4.374e-01   1.25965    4.1490
ORdate_year                                               9.558e-01  1.046e+00   0.87999    1.0382
Hypertension.compositeno                                  3.789e-01  2.639e+00   0.13634    1.0532
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    9.231e-01  1.083e+00   0.53742    1.5854
SmokerStatusEx-smoker                                     5.383e-01  1.858e+00   0.32429    0.8935
SmokerStatusNever smoked                                  7.607e-01  1.315e+00   0.37170    1.5570
Med.Statin.LLDno                                          1.057e+00  9.462e-01   0.61526    1.8153
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    1.394e+00  7.175e-01   0.72237    2.6894
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.802e-01  1.020e+00   0.96879    0.9917
BMI                                                       1.015e+00  9.852e-01   0.95054    1.0840
MedHx_CVDyes                                              2.002e+00  4.995e-01   1.15752    3.4620
stenose0-49%                                              1.106e-07  9.039e+06   0.00000       Inf
stenose50-70%                                             1.651e-01  6.056e+00   0.01008    2.7052
stenose70-90%                                             7.756e-01  1.289e+00   0.10037    5.9929
stenose90-99%                                             7.127e-01  1.403e+00   0.09030    5.6244
stenose100% (Occlusion)                                   1.953e-07  5.121e+06   0.00000       Inf
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                             2.181e+00  4.584e-01   0.13215   36.0042
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.733  (se = 0.028 )
Likelihood ratio test= 51.75  on 19 df,   p=7e-05
Wald test            = 45.64  on 19 df,   p=6e-04
Score (logrank) test = 49.2  on 19 df,   p=2e-04


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epcoronary.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcoronary.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.290473 
Standard error............: 0.240969 
Odds ratio (effect size)..: 1.337 
Lower 95% CI..............: 0.834 
Upper 95% CI..............: 2.144 
T-value...................: 1.205438 
P-value...................: 0.2280341 
Sample size in model......: 1029 
Number of events..........: 78 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 493, number of events= 42 
   (1930 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162]  3.996e-02  1.041e+00  3.269e-01  0.122   0.9027  
Age                                                        4.142e-02  1.042e+00  2.293e-02  1.806   0.0709 .
Gendermale                                                 9.841e-01  2.675e+00  4.684e-01  2.101   0.0356 *
ORdate_year                                               -2.760e-01  7.588e-01  1.478e-01 -1.867   0.0620 .
Hypertension.compositeno                                  -2.340e-01  7.914e-01  5.431e-01 -0.431   0.6666  
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA  
DiabetesStatusDiabetes                                     5.455e-01  1.726e+00  3.576e-01  1.526   0.1271  
SmokerStatusEx-smoker                                     -4.047e-01  6.672e-01  3.492e-01 -1.159   0.2465  
SmokerStatusNever smoked                                  -1.727e-02  9.829e-01  5.071e-01 -0.034   0.9728  
Med.Statin.LLDno                                          -5.702e-02  9.446e-01  3.626e-01 -0.157   0.8751  
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA  
Med.all.antiplateletno                                     6.030e-01  1.828e+00  4.594e-01  1.313   0.1893  
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA  
GFR_MDRD                                                  -1.491e-02  9.852e-01  8.623e-03 -1.730   0.0837 .
BMI                                                        4.034e-02  1.041e+00  4.216e-02  0.957   0.3387  
MedHx_CVDyes                                               1.532e-01  1.166e+00  3.489e-01  0.439   0.6605  
stenose0-49%                                              -1.499e-01  8.608e-01  8.796e+03  0.000   1.0000  
stenose50-70%                                              1.616e+01  1.041e+07  5.185e+03  0.003   0.9975  
stenose70-90%                                              1.636e+01  1.269e+07  5.185e+03  0.003   0.9975  
stenose90-99%                                              1.621e+01  1.100e+07  5.185e+03  0.003   0.9975  
stenose100% (Occlusion)                                           NA         NA  0.000e+00     NA       NA  
stenoseNA                                                         NA         NA  0.000e+00     NA       NA  
stenose50-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose99                                                         NA         NA  0.000e+00     NA       NA  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] 1.041e+00  9.608e-01    0.5484     1.975
Age                                                       1.042e+00  9.594e-01    0.9965     1.090
Gendermale                                                2.675e+00  3.738e-01    1.0683     6.700
ORdate_year                                               7.588e-01  1.318e+00    0.5679     1.014
Hypertension.compositeno                                  7.914e-01  1.264e+00    0.2729     2.295
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    1.726e+00  5.795e-01    0.8562     3.478
SmokerStatusEx-smoker                                     6.672e-01  1.499e+00    0.3365     1.323
SmokerStatusNever smoked                                  9.829e-01  1.017e+00    0.3638     2.655
Med.Statin.LLDno                                          9.446e-01  1.059e+00    0.4641     1.923
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    1.828e+00  5.472e-01    0.7427     4.497
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.852e-01  1.015e+00    0.9687     1.002
BMI                                                       1.041e+00  9.605e-01    0.9586     1.131
MedHx_CVDyes                                              1.166e+00  8.580e-01    0.5883     2.309
stenose0-49%                                              8.608e-01  1.162e+00    0.0000       Inf
stenose50-70%                                             1.041e+07  9.610e-08    0.0000       Inf
stenose70-90%                                             1.269e+07  7.881e-08    0.0000       Inf
stenose90-99%                                             1.100e+07  9.094e-08    0.0000       Inf
stenose100% (Occlusion)                                          NA         NA        NA        NA
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                                    NA         NA        NA        NA
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.725  (se = 0.036 )
Likelihood ratio test= 25.04  on 17 df,   p=0.09
Wald test            = 15.97  on 17 df,   p=0.5
Score (logrank) test = 24.24  on 17 df,   p=0.1


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epcoronary.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcoronary.3years 
Protein...................: MCP1_rank 
Effect size...............: 0.039956 
Standard error............: 0.326862 
Odds ratio (effect size)..: 1.041 
Lower 95% CI..............: 0.548 
Upper 95% CI..............: 1.975 
T-value...................: 0.122242 
P-value...................: 0.9027075 
Sample size in model......: 493 
Number of events..........: 42 
* Analyzing the effect of plaque proteins on [epcvdeath.3years].
 - creating temporary SE for this work.
 - making a 'Surv' object and adding this to temporary dataframe.
 - making strata of each of the plaque proteins and start survival analysis.
   > processing [MCP1_pg_ml_2015_rank]; 1 out of 2 proteins.
   > cross tabulation of MCP1_pg_ml_2015_rank-stratum.

[-3.34125,0.00209) [ 0.00209,3.34125] 
               600                599 

   > fitting the model for MCP1_pg_ml_2015_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 1029, number of events= 33 
   (1394 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)    
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125]  3.757e-02  1.038e+00  3.794e-01  0.099 0.921123    
Age                                                        7.047e-02  1.073e+00  2.723e-02  2.588 0.009658 ** 
Gendermale                                                 1.226e+00  3.407e+00  5.594e-01  2.191 0.028427 *  
ORdate_year                                               -7.706e-02  9.258e-01  7.153e-02 -1.077 0.281331    
Hypertension.compositeno                                  -1.773e+01  2.000e-08  3.957e+03 -0.004 0.996425    
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA    
DiabetesStatusDiabetes                                    -9.565e-03  9.905e-01  4.279e-01 -0.022 0.982165    
SmokerStatusEx-smoker                                     -5.440e-01  5.804e-01  4.052e-01 -1.342 0.179449    
SmokerStatusNever smoked                                  -3.778e-01  6.854e-01  6.197e-01 -0.610 0.542134    
Med.Statin.LLDno                                           1.675e-02  1.017e+00  4.225e-01  0.040 0.968375    
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA    
Med.all.antiplateletno                                     1.115e+00  3.050e+00  4.178e-01  2.669 0.007602 ** 
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA    
GFR_MDRD                                                  -3.284e-02  9.677e-01  9.422e-03 -3.485 0.000491 ***
BMI                                                        8.583e-02  1.090e+00  5.240e-02  1.638 0.101466    
MedHx_CVDyes                                               7.410e-01  2.098e+00  4.621e-01  1.603 0.108837    
stenose0-49%                                              -2.059e+01  1.144e-09  2.687e+04 -0.001 0.999389    
stenose50-70%                                             -1.271e+00  2.805e-01  1.263e+00 -1.007 0.314004    
stenose70-90%                                             -1.782e+00  1.683e-01  1.122e+00 -1.587 0.112409    
stenose90-99%                                             -1.497e+00  2.239e-01  1.150e+00 -1.301 0.193259    
stenose100% (Occlusion)                                   -1.989e+01  2.301e-09  1.983e+04 -0.001 0.999200    
stenoseNA                                                         NA         NA  0.000e+00     NA       NA    
stenose50-99%                                             -1.943e+01  3.629e-09  3.412e+04 -0.001 0.999546    
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA    
stenose99                                                         NA         NA  0.000e+00     NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00209,3.34125] 1.038e+00  9.631e-01   0.49356    2.1842
Age                                                       1.073e+00  9.320e-01   1.01724    1.1318
Gendermale                                                3.407e+00  2.935e-01   1.13818   10.1980
ORdate_year                                               9.258e-01  1.080e+00   0.80473    1.0652
Hypertension.compositeno                                  2.000e-08  5.000e+07   0.00000       Inf
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    9.905e-01  1.010e+00   0.42820    2.2911
SmokerStatusEx-smoker                                     5.804e-01  1.723e+00   0.26230    1.2843
SmokerStatusNever smoked                                  6.854e-01  1.459e+00   0.20343    2.3092
Med.Statin.LLDno                                          1.017e+00  9.834e-01   0.44427    2.3276
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    3.050e+00  3.278e-01   1.34493    6.9181
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.677e-01  1.033e+00   0.94999    0.9857
BMI                                                       1.090e+00  9.178e-01   0.98326    1.2075
MedHx_CVDyes                                              2.098e+00  4.766e-01   0.84810    5.1899
stenose0-49%                                              1.144e-09  8.743e+08   0.00000       Inf
stenose50-70%                                             2.805e-01  3.566e+00   0.02361    3.3316
stenose70-90%                                             1.683e-01  5.941e+00   0.01865    1.5191
stenose90-99%                                             2.239e-01  4.466e+00   0.02349    2.1340
stenose100% (Occlusion)                                   2.301e-09  4.346e+08   0.00000       Inf
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                             3.629e-09  2.755e+08   0.00000       Inf
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.844  (se = 0.031 )
Likelihood ratio test= 61.1  on 19 df,   p=3e-06
Wald test            = 21.88  on 19 df,   p=0.3
Score (logrank) test = 57.18  on 19 df,   p=1e-05


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_pg_ml_2015_rank ' and its association to ' epcvdeath.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcvdeath.3years 
Protein...................: MCP1_pg_ml_2015_rank 
Effect size...............: 0.037572 
Standard error............: 0.37944 
Odds ratio (effect size)..: 1.038 
Lower 95% CI..............: 0.494 
Upper 95% CI..............: 2.184 
T-value...................: 0.099019 
P-value...................: 0.921123 
Sample size in model......: 1029 
Number of events..........: 33 
   > processing [MCP1_rank]; 2 out of 2 proteins.
   > cross tabulation of MCP1_rank-stratum.

[-3.12162,0.00225) [ 0.00225,3.12162] 
               278                278 

   > fitting the model for MCP1_rank-stratum.

   > make a Kaplan-Meier-shizzle...
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.

   > perform the Cox-regression fashizzle and plot it...

Call:
coxph(formula = Surv(TEMP.DF[, eptime], event) ~ TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = TEMP.DF)

  n= 493, number of events= 23 
   (1930 observations deleted due to missingness)

                                                                coef  exp(coef)   se(coef)      z Pr(>|z|)  
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] -2.418e-01  7.852e-01  4.414e-01 -0.548   0.5839  
Age                                                        5.035e-02  1.052e+00  3.206e-02  1.571   0.1163  
Gendermale                                                 1.075e+00  2.930e+00  6.727e-01  1.598   0.1100  
ORdate_year                                               -1.134e-01  8.928e-01  1.951e-01 -0.581   0.5610  
Hypertension.compositeno                                  -1.802e+01  1.487e-08  4.552e+03 -0.004   0.9968  
Hypertension.compositeyes                                         NA         NA  0.000e+00     NA       NA  
DiabetesStatusDiabetes                                     5.064e-01  1.659e+00  5.312e-01  0.953   0.3405  
SmokerStatusEx-smoker                                     -6.006e-01  5.485e-01  4.733e-01 -1.269   0.2045  
SmokerStatusNever smoked                                  -1.010e-01  9.039e-01  7.296e-01 -0.138   0.8899  
Med.Statin.LLDno                                           7.451e-01  2.107e+00  4.587e-01  1.625   0.1043  
Med.Statin.LLDyes                                                 NA         NA  0.000e+00     NA       NA  
Med.all.antiplateletno                                     5.400e-01  1.716e+00  6.750e-01  0.800   0.4237  
Med.all.antiplateletyes                                           NA         NA  0.000e+00     NA       NA  
GFR_MDRD                                                  -2.044e-02  9.798e-01  1.039e-02 -1.968   0.0491 *
BMI                                                        2.176e-02  1.022e+00  5.934e-02  0.367   0.7139  
MedHx_CVDyes                                               1.312e+00  3.713e+00  6.416e-01  2.044   0.0409 *
stenose0-49%                                              -7.481e-01  4.733e-01  3.720e+04  0.000   1.0000  
stenose50-70%                                              4.915e-01  1.635e+00  2.257e+04  0.000   1.0000  
stenose70-90%                                              1.839e+01  9.706e+07  2.097e+04  0.001   0.9993  
stenose90-99%                                              1.809e+01  7.220e+07  2.097e+04  0.001   0.9993  
stenose100% (Occlusion)                                           NA         NA  0.000e+00     NA       NA  
stenoseNA                                                         NA         NA  0.000e+00     NA       NA  
stenose50-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose70-99%                                                     NA         NA  0.000e+00     NA       NA  
stenose99                                                         NA         NA  0.000e+00     NA       NA  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                                                          exp(coef) exp(-coef) lower .95 upper .95
TEMP.DF[[TRAITS.PROTEIN.RANK[protein]]][ 0.00225,3.12162] 7.852e-01  1.274e+00    0.3306    1.8651
Age                                                       1.052e+00  9.509e-01    0.9876    1.1199
Gendermale                                                2.930e+00  3.413e-01    0.7839   10.9510
ORdate_year                                               8.928e-01  1.120e+00    0.6091    1.3086
Hypertension.compositeno                                  1.487e-08  6.727e+07    0.0000       Inf
Hypertension.compositeyes                                        NA         NA        NA        NA
DiabetesStatusDiabetes                                    1.659e+00  6.027e-01    0.5858    4.7001
SmokerStatusEx-smoker                                     5.485e-01  1.823e+00    0.2169    1.3869
SmokerStatusNever smoked                                  9.039e-01  1.106e+00    0.2163    3.7768
Med.Statin.LLDno                                          2.107e+00  4.747e-01    0.8574    5.1763
Med.Statin.LLDyes                                                NA         NA        NA        NA
Med.all.antiplateletno                                    1.716e+00  5.827e-01    0.4571    6.4433
Med.all.antiplateletyes                                          NA         NA        NA        NA
GFR_MDRD                                                  9.798e-01  1.021e+00    0.9600    0.9999
BMI                                                       1.022e+00  9.785e-01    0.9098    1.1480
MedHx_CVDyes                                              3.713e+00  2.693e-01    1.0557   13.0574
stenose0-49%                                              4.733e-01  2.113e+00    0.0000       Inf
stenose50-70%                                             1.635e+00  6.117e-01    0.0000       Inf
stenose70-90%                                             9.706e+07  1.030e-08    0.0000       Inf
stenose90-99%                                             7.220e+07  1.385e-08    0.0000       Inf
stenose100% (Occlusion)                                          NA         NA        NA        NA
stenoseNA                                                        NA         NA        NA        NA
stenose50-99%                                                    NA         NA        NA        NA
stenose70-99%                                                    NA         NA        NA        NA
stenose99                                                        NA         NA        NA        NA

Concordance= 0.815  (se = 0.039 )
Likelihood ratio test= 33.08  on 17 df,   p=0.01
Wald test            = 12.37  on 17 df,   p=0.8
Score (logrank) test = 27.71  on 17 df,   p=0.05


   > writing the Cox-regression fashizzle to Excel...
Summarizing Cox regression results for ' MCP1_rank ' and its association to ' epcvdeath.3years ' in ' AEDB.CEA '.
Collecting data.

We have collected the following:
Dataset used..............: AEDB.CEA 
Outcome analyzed..........: epcvdeath.3years 
Protein...................: MCP1_rank 
Effect size...............: -0.241771 
Standard error............: 0.441385 
Odds ratio (effect size)..: 0.785 
Lower 95% CI..............: 0.331 
Upper 95% CI..............: 1.865 
T-value...................: -0.547755 
P-value...................: 0.5838601 
Sample size in model......: 493 
Number of events..........: 23 

cat("- Edit the column names...\n")
- Edit the column names...
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
- Correct the variable types...
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
cat("- Writing results to Excel-file...\n")
- Writing results to Excel-file...
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL2.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
- Removing intermediate files...
rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

rm(head.style)
object 'head.style' not found

30-days follow-up

MODEL 1

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times30)){
  eptime = times30[i]
  ep = endpoints30[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    ylim = c(0.75, 1),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [days]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".30days.pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 1 (Simple model)
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age+Gender + ORdate_year, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age+Gender + ORdate_year, data = TEMP.DF)

    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         ylim = c(0.75, 1), xlim = c(0,3), col = c("#595A5C", "#DB003F", "#1290D9"),
         # ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [days]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL1.30days.pdf"), height = 12, width = 10, onefile = TRUE)
    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}

cat("- Edit the column names...\n")
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
library(openxlsx)
cat("- Writing results to Excel-file...\n")
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL1.30days.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
#rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

#rm(head.style)

MODEL 2

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times30)){
  eptime = times30[i]
  ep = endpoints30[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  #as.integer(TEMP.DF[,ep] == "Excluded")

  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    ylim = c(0.75, 1),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [days]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".30days.pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 2 adjusted for age, sex, hypertension, diabetes, smoking, LDL-C levels, lipid-lowering drugs, antiplatelet drugs, eGFR, BMI, history of CVD, level of stenosis
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)

  
    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         ylim = c(0.75, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         # ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [days]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL2.30days.pdf"), height = 12, width = 10, onefile = TRUE)

    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}

cat("- Edit the column names...\n")
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
cat("- Writing results to Excel-file...\n")
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL2.30days.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

rm(head.style)

90-days follow-up

MODEL 1

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times90)){
  eptime = times90[i]
  ep = endpoints90[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    ylim = c(0.75, 1),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [days]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".90days.pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 1 (Simple model)
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age+Gender + ORdate_year, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age+Gender + ORdate_year, data = TEMP.DF)

    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         ylim = c(0.75, 1), xlim = c(0,3), col = c("#595A5C", "#DB003F", "#1290D9"),
         # ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [days]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL1.90days.pdf"), height = 12, width = 10, onefile = TRUE)
    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}

cat("- Edit the column names...\n")
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
library(openxlsx)
cat("- Writing results to Excel-file...\n")
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL1.90days.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
#rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

#rm(head.style)

MODEL 2

# Set up a dataframe to receive results
COX.results <- data.frame(matrix(NA, ncol = 12, nrow = 0))

# Looping over each protein/endpoint/time combination
for (i in 1:length(times90)){
  eptime = times90[i]
  ep = endpoints90[i]
  cat(paste0("* Analyzing the effect of plaque proteins on [",ep,"].\n"))
  cat(" - creating temporary SE for this work.\n")
  TEMP.DF = as.data.frame(AEDB.CEA)
  cat(" - making a 'Surv' object and adding this to temporary dataframe.\n")
  TEMP.DF$event <- as.integer(TEMP.DF[,ep])
  #as.integer(TEMP.DF[,ep] == "Excluded")

  TEMP.DF$y <- Surv(time = TEMP.DF[,eptime], event = TEMP.DF$event)
  cat(" - making strata of each of the plaque proteins and start survival analysis.\n")
  
  for (protein in 1:length(TRAITS.PROTEIN.RANK)){
    cat(paste0("   > processing [",TRAITS.PROTEIN.RANK[protein],"]; ",protein," out of ",length(TRAITS.PROTEIN.RANK)," proteins.\n"))
    # splitting into two groups
    TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]] <- cut2(TEMP.DF[,TRAITS.PROTEIN.RANK[protein]], g = 2)
    cat(paste0("   > cross tabulation of ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    show(table(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]))
    
    cat(paste0("\n   > fitting the model for ",TRAITS.PROTEIN.RANK[protein],"-stratum.\n"))
    fit <- survfit(as.formula(paste0("y ~ ", TRAITS.PROTEIN.RANK[protein])), data = TEMP.DF)
    
    cat(paste0("\n   > make a Kaplan-Meier-shizzle...\n"))
    # make Kaplan-Meier curve and save it
    show(ggsurvplot(fit, data = TEMP.DF,
                    palette = c("#DB003F", "#1290D9"),
                    # palete = c("F59D10", "#DB003F", "#49A01D", "#1290D9"),
                    linetype = c(1,2),
                    ylim = c(0.75, 1),
                    # linetype = c(1,2,3,4),
                    # conf.int = FALSE, conf.int.fill = "#595A5C", conf.int.alpha = 0.1,
                    pval = FALSE, pval.method = FALSE, pval.size = 4,
                    risk.table = TRUE, risk.table.y.text = FALSE, tables.y.text.col = TRUE, fontsize = 4,
                    censor = FALSE,
                    legend = "right",
                    legend.title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
                    legend.labs = c("low", "high"),
                    title = paste0("Risk of ",ep,""), xlab = "Time [days]", font.main = c(16, "bold", "black")))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.survival.",ep,".2G.",
                               TRAITS.PROTEIN.RANK[protein],".90days.pdf"), width = 12, height = 10, onefile = FALSE)

    cat(paste0("\n   > perform the Cox-regression fashizzle and plot it...\n"))
    ### Do Cox-regression and plot it
    
    ### MODEL 2 adjusted for age, sex, hypertension, diabetes, smoking, LDL-C levels, lipid-lowering drugs, antiplatelet drugs, eGFR, BMI, history of CVD, level of stenosis
    cox = coxph(Surv(TEMP.DF[,eptime], event) ~ TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]]+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)
    coxplot = coxph(Surv(TEMP.DF[,eptime], event) ~ strata(TEMP.DF[[ TRAITS.PROTEIN.RANK[protein] ]])+Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose, data = TEMP.DF)

  
    plot(survfit(coxplot), main = paste0("Cox proportional hazard of [",ep,"] per [",eptime,"]."),
         ylim = c(0.75, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         # ylim = c(0, 1), xlim = c(0,3), col = c("#DB003F", "#1290D9"),
         lty = c(1,2), lwd = 2,
         ylab = "Suvival probability", xlab = "FU time [days]",
         mark.time = FALSE, axes = FALSE, bty = "n")
    legend("topright",
           c("low", "high"),
           title = paste0("",TRAITS.PROTEIN.RANK[protein],""),
           col = c("#DB003F", "#1290D9"),
           lty = c(1,2), lwd = 2,
           bty = "n")
    axis(side = 1, at = seq(0, 3, by = 1))
    axis(side = 2, at = seq(0, 1, by = 0.2))
    dev.copy2pdf(file = paste0(COX_loc,"/",
                               Today,".AEDB.CEA.Cox.",ep,".2G.",
                               # Today,".AEDB.CEA.Cox.",ep,".4G.",
                               TRAITS.PROTEIN.RANK[protein],".MODEL2.90days.pdf"), height = 12, width = 10, onefile = TRUE)

    show(summary(cox))

    cat(paste0("\n   > writing the Cox-regression fashizzle to Excel...\n"))

    COX.results.TEMP <- data.frame(matrix(NA, ncol = 12, nrow = 0))
    COX.results.TEMP[1,] = COX.STAT(cox, "AEDB.CEA", ep, TRAITS.PROTEIN.RANK[protein])
    COX.results = rbind(COX.results, COX.results.TEMP)

  }
}

cat("- Edit the column names...\n")
colnames(COX.results) = c("Dataset", "Outcome", "CpG",
                          "Beta", "s.e.m.",
                          "HR", "low95CI", "up95CI",
                          "Z-value", "P-value", "SampleSize", "N_events")

cat("- Correct the variable types...\n")
COX.results$Beta <- as.numeric(COX.results$Beta)
COX.results$s.e.m. <- as.numeric(COX.results$s.e.m.)
COX.results$HR <- as.numeric(COX.results$HR)
COX.results$low95CI <- as.numeric(COX.results$low95CI)
COX.results$up95CI <- as.numeric(COX.results$up95CI)
COX.results$`Z-value` <- as.numeric(COX.results$`Z-value`)
COX.results$`P-value` <- as.numeric(COX.results$`P-value`)
COX.results$SampleSize <- as.numeric(COX.results$SampleSize)
COX.results$N_events <- as.numeric(COX.results$N_events)

AEDB.CEA.COX.results <- COX.results

# Save the data
cat("- Writing results to Excel-file...\n")
head.style <- createStyle(textDecoration = "BOLD")
write.xlsx(AEDB.CEA.COX.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Cox.2G.MODEL2.90days.xlsx"),
           creator = "Sander W. van der Laan",
           sheetName = "Results", headerStyle = head.style,
           row.names = FALSE, col.names = TRUE, overwrite = TRUE)

# Removing intermediates
cat("- Removing intermediate files...\n")
rm(TEMP.DF, protein, fit, cox, coxplot, COX.results, COX.results.TEMP, head.style, AEDB.CEA.COX.results)

rm(head.style)

Correlations

We correlated plaque levels of the biomarkers.

MCP1 plaque levels


# Installation of ggcorrplot()
# --------------------------------
if(!require(devtools)) 
  install.packages("devtools")
devtools::install_github("kassambara/ggcorrplot")
Skipping install of 'ggcorrplot' from a github remote, the SHA1 (c46b4cce) has not changed since last install.
  Use `force = TRUE` to force installation
library(ggcorrplot)


# Creating matrix - inverse-rank transformation
# --------------------------------
# AEDB.CEA.temp <- subset(AEDB.CEA, 
#                           select = c("IL6_rank", "MCP1_rank", "IL6_pg_ug_2015_rank", "MCP1_pg_ug_2015_rank", "IL6R_pg_ug_2015_rank",
#                                                TRAITS.BIN, TRAITS.CON.RANK)
#                                     )
# AEDB.CEA.temp <- subset(AEDB.CEA, 
#                           select = c("MCP1_rank", "MCP1_pg_ug_2015_rank",
#                                                TRAITS.BIN, TRAITS.CON.RANK)
#                                     )
AEDB.CEA.temp <- subset(AEDB.CEA, 
                          select = c("MCP1_pg_ml_2015_rank",
                                     TRAITS.BIN, 
                                     TRAITS.CON.RANK,
                                     "Symptoms.5G", "AsymptSympt", "EP_major", "EP_composite")
                                    )


AEDB.CEA.temp$CalcificationPlaque <- as.numeric(AEDB.CEA.temp$CalcificationPlaque)
AEDB.CEA.temp$CollagenPlaque <- as.numeric(AEDB.CEA.temp$CollagenPlaque)
AEDB.CEA.temp$Fat10Perc <- as.numeric(AEDB.CEA.temp$Fat10Perc)
AEDB.CEA.temp$MAC_binned <- as.numeric(AEDB.CEA.temp$MAC_binned)
AEDB.CEA.temp$SMC_binned <- as.numeric(AEDB.CEA.temp$SMC_binned)
AEDB.CEA.temp$IPH <- as.numeric(AEDB.CEA.temp$IPH)
AEDB.CEA.temp$Symptoms.5G <- as.numeric(AEDB.CEA.temp$Symptoms.5G)
AEDB.CEA.temp$AsymptSympt <- as.numeric(AEDB.CEA.temp$AsymptSympt)
AEDB.CEA.temp$EP_major <- as.numeric(AEDB.CEA.temp$EP_major)
AEDB.CEA.temp$EP_composite <- as.numeric(AEDB.CEA.temp$EP_composite)
str(AEDB.CEA.temp)
'data.frame':   2423 obs. of  15 variables:
 $ MCP1_pg_ml_2015_rank: num  0.45 2.497 0.09 1.572 0.652 ...
 $ CalcificationPlaque : num  1 1 1 1 2 2 2 2 1 2 ...
 $ CollagenPlaque      : num  2 2 2 2 1 2 2 2 2 1 ...
 $ Fat10Perc           : num  2 2 2 2 2 2 2 1 2 2 ...
 $ IPH                 : num  2 2 2 1 2 2 2 2 2 2 ...
 $ MAC_binned          : num  1 1 1 1 1 1 2 1 1 1 ...
 $ SMC_binned          : num  1 1 2 2 1 1 1 2 2 1 ...
 $ Macrophages_rank    : num  1.121 1.366 0.722 0.396 -1.013 ...
 $ SMC_rank            : num  1.13161 0.00148 1.42686 1.26957 0.34377 ...
 $ MAC_SMC_ratio_rank  : num  0.236 1.001 -0.139 -0.344 -1.245 ...
 $ VesselDensity_rank  : num  -0.978 -0.774 0.717 1.1 1.518 ...
 $ Symptoms.5G         : num  5 5 6 6 5 6 1 5 2 5 ...
 $ AsymptSympt         : num  3 3 3 3 3 3 1 3 2 3 ...
 $ EP_major            : num  0 0 0 0 1 0 0 0 1 0 ...
 $ EP_composite        : num  2 2 2 2 3 2 3 2 3 2 ...
AEDB.CEA.matrix.RANK <- as.matrix(AEDB.CEA.temp)
rm(AEDB.CEA.temp)

corr_biomarkers.rank <- round(cor(AEDB.CEA.matrix.RANK, 
                             use = "pairwise.complete.obs", #the correlation or covariance between each pair of variables is computed using all complete pairs of observations on those variables
                             method = "spearman"), 3)
# corr_biomarkers.rank

corr_biomarkers_p.rank <- ggcorrplot::cor_pmat(AEDB.CEA.matrix.RANK, use = "pairwise.complete.obs", method = "spearman")
Cannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with ties
# Add correlation coefficients
# --------------------------------
# argument lab = TRUE
ggcorrplot(corr_biomarkers.rank, 
           method = "square", 
           type = "lower",
           title = "Cross biomarker correlations", 
           show.legend = TRUE, legend.title = bquote("Spearman's"~italic(rho)),
           ggtheme = ggplot2::theme_minimal, outline.color = "#FFFFFF",
           show.diag = TRUE,
           hc.order = FALSE, 
           lab = FALSE,
           digits = 3,
           # p.mat = corr_biomarkers_p.rank, sig.level = 0.05,
           colors = c("#1290D9", "#FFFFFF", "#E55738"))

# flattenCorrMatrix
# --------------------------------
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    biomarker_row = rownames(cormat)[row(cormat)[ut]],
    biomarker_column = rownames(cormat)[col(cormat)[ut]],
    spearman_cor  =(cormat)[ut],
    pval = pmat[ut]
    )
}

corr_biomarkers.rank.df <- as.data.table(flattenCorrMatrix(corr_biomarkers.rank, corr_biomarkers_p.rank))
DT::datatable(corr_biomarkers.rank.df)

NA
# chart of a correlation matrix
# --------------------------------
# Alternative solution https://www.r-graph-gallery.com/199-correlation-matrix-with-ggally.html
install.packages.auto("PerformanceAnalytics")
Loading required package: PerformanceAnalytics
Loading required package: xts
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric


Attaching package: ‘xts’

The following objects are masked from ‘package:data.table’:

    first, last

The following objects are masked from ‘package:dplyr’:

    first, last


Attaching package: ‘PerformanceAnalytics’

The following object is masked from ‘package:graphics’:

    legend
chart.Correlation.new <- function (R, histogram = TRUE, method = c("pearson", "kendall", 
    "spearman"), ...) 
{
    x = checkData(R, method = "matrix")
    if (missing(method)) 
        method = method[1]
    cormeth <- method
    panel.cor <- function(x, y, digits = 2, prefix = "", use = "pairwise.complete.obs", 
        method = cormeth, cex.cor, ...) {
        usr <- par("usr")
        on.exit(par(usr))
        par(usr = c(0, 1, 0, 1))
        r <- cor(x, y, use = use, method = method)
        txt <- format(c(r, 0.123456789), digits = digits)[1]
        txt <- paste(prefix, txt, sep = "")
        if (missing(cex.cor)) 
            cex <- 0.8/strwidth(txt)
        test <- cor.test(as.numeric(x), as.numeric(y), method = method)
        Signif <- symnum(test$p.value, corr = FALSE, na = FALSE, 
            cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", 
                "**", "*", ".", " "))
        text(0.5, 0.5, txt, cex = cex * (abs(r) + 0.3)/1.3)
        text(0.8, 0.8, Signif, cex = cex, col = 2)
    }
    f <- function(t) {
        dnorm(t, mean = mean(x), sd = sd.xts(x))
    }
    dotargs <- list(...)
    dotargs$method <- NULL
    rm(method)
    hist.panel = function(x, ... = NULL) {
        par(new = TRUE)
        hist(x, col = "#1290D9", probability = TRUE, axes = FALSE, 
        # hist(x, col = "light gray", probability = TRUE, axes = FALSE, 
            main = "", breaks = "FD")
        lines(density(x, na.rm = TRUE), col = "#E55738", lwd = 1)
        rug(x)
    }
    if (histogram) 
        pairs(x, gap = 0, lower.panel = panel.smooth, upper.panel = panel.cor, 
            diag.panel = hist.panel, ...)
    else pairs(x, gap = 0, lower.panel = panel.smooth, upper.panel = panel.cor, ...)
}


chart.Correlation.new(AEDB.CEA.matrix.RANK, method = "spearman", histogram = TRUE, pch = 3)

# alternative chart of a correlation matrix
# --------------------------------
# Alternative solution https://www.r-graph-gallery.com/199-correlation-matrix-with-ggally.html
install.packages.auto("GGally")
Loading required package: GGally
Registered S3 method overwritten by 'GGally':
  method from   
  +.gg   ggplot2

Attaching package: ‘GGally’

The following object is masked from ‘package:dplyr’:

    nasa
# Quick display of two cabapilities of GGally, to assess the distribution and correlation of variables 
library(GGally)
 
# From the help page:

ggpairs(AEDB.CEA,
        columns = c("MCP1_pg_ml_2015_rank", TRAITS.BIN, TRAITS.CON.RANK, "Symptoms.5G", "AsymptSympt", "EP_major", "EP_composite"),
        columnLabels = c("MCP1",
                         "Calcification", "Collagen", "Fat 10%", "IPH", "Macrophages (binned)", "SMC (binned)", "Macrophages", "SMC", "Macrophage/SMC", "Vessel density",
                         "Symptoms", "Symptoms (grouped)", "MACE", "Composite"),
        method = c("spearman"),
        # ggplot2::aes(colour = Gender),
        progress = FALSE)
Extra arguments: 'method' are being ignored.  If these are meant to be aesthetics, submit them using the 'mapping' variable within ggpairs with ggplot2::aes or ggplot2::aes_string.

Additional figures

Age and sex

We want to create per-age-group figures.

  • Box and Whisker plot for MCP-1 plaque levels by sex.
  • Box and Whisker plot for MCP-1 plaque levels by (sex and) age group (<55, 55-64, 65-74, 75-84, 85+).

Inverse-rank transformed data


# ?ggpubr::ggboxplot()

# Global test
compare_means(MCP1_pg_ml_2015_rank ~ Gender,  data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("Gender"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Gender.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# ?ggpubr::ggboxplot()

# Global test
compare_means(MCP1_pg_ml_2015_rank ~ Gender,  data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("Gender"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Gender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(AgeGroup = factor(case_when(Age < 55 ~ "<55",
                                                     Age >= 55  & Age <= 64 ~ "55-64",
                                                     Age >= 65  & Age <= 74 ~ "65-74",
                                                     Age >= 75  & Age <= 84 ~ "75-84",
                                                     Age >= 85 ~ "85+"))) 

AEDB.CEA <- AEDB.CEA %>% mutate(AgeGroupSex = factor(case_when(Age < 55 & Gender == "male" ~ "<55 males" ,
                                                        Age >= 55  & Age <= 64 & Gender == "male"~ "55-64 males",
                                                        Age >= 65  & Age <= 74 & Gender == "male"~ "65-74 males",
                                                        Age >= 75  & Age <= 84 & Gender == "male"~ "75-84 males",
                                                        Age >= 85 & Gender == "male"~ "85+ males",
                                                        Age < 55 & Gender == "female" ~ "<55 females" ,
                                                        Age >= 55  & Age <= 64 & Gender == "female"~ "55-64 females ",
                                                        Age >= 65  & Age <= 74 & Gender == "female"~ "65-74 females",
                                                        Age >= 75  & Age <= 84 & Gender == "female"~ "75-84 females",
                                                        Age >= 85 & Gender == "female"~ "85+ females")))

table(AEDB.CEA$AgeGroup, AEDB.CEA$Gender)
       
        female male
  <55       45   98
  55-64    194  410
  65-74    264  687
  75-84    202  439
  85+       34   50
table(AEDB.CEA$AgeGroupSex)

   <55 females      <55 males 55-64 females     55-64 males  65-74 females    65-74 males  75-84 females    75-84 males    85+ females      85+ males 
            45             98            194            410            264            687            202            439             34             50 

Now we can draw some graphs of plaque MCP1 levels per sex and age group.

Inverse-rank transformed data


# ?ggpubr::ggboxplot()

# Global test
compare_means(MCP1_pg_ml_2015_rank ~ AgeGroup,  data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("AgeGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Age groups (years)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "AgeGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = AgeGroup), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AgeGroup.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ AgeGroup, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("AgeGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Age groups (years) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter",
                  ggthemne = theme_minimal()) +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AgeGroup_perGender.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# ?ggpubr::ggboxplot()

# Global test
compare_means(MCP1_pg_ml_2015_rank ~ AgeGroup,  data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("AgeGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Age groups (years)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "AgeGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = AgeGroup), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AgeGroup.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ AgeGroup, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA, 
                  x = c("AgeGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Age groups (years) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter",
                  ggthemne = theme_minimal()) +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AgeGroup_perGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Hypertension & blood pressure

We want to create figures of MCP1 levels stratified by hypertension/blood pressure, and use of anti-hypertensive drugs.

  • Box and Whisker plot for MCP-1 plaque levels by hypertension group (no, yes)
  • Box and Whisker plot for MCP-1 plaque levels by systolic blood pressure group (<120, 120-139, 140-159,160+)
library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(SBPGroup = factor(case_when(systolic < 120 ~ "<120",
                                                     systolic >= 120  & systolic <= 139 ~ "120-139",
                                                     systolic >= 140  & systolic <= 159 ~ "140-159",
                                                     systolic >= 160 ~ "160+"))) 

table(AEDB.CEA$SBPGroup, AEDB.CEA$Gender)
         
          female male
  <120        54  114
  120-139    145  326
  140-159    197  497
  160+       269  548

Now we can draw some graphs of plaque MCP1 levels per sex and hypertension/blood pressure group.

Inverse-rank transformed data

compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, data = AEDB.CEA %>% filter(!is.na(SBPGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "SBPGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = SBPGroup), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.selfreport",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.selfreport), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.drugs, data = AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), 
                  x = c("Hypertension.drugs"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Hypertension medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.HypertensionDrugs.pdf"), plot = last_plot())



compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(SBPGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup_byGender.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension_byGender.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.drugs, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), 
                  x = c("Hypertension.drugs"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Hypertension medication use per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.drugs_byGender.pdf"), plot = last_plot())



compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, group.by = "Hypertension.drugs", data = AEDB.CEA %>% filter(!is.na(SBPGroup) & !is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup) & !is.na(Hypertension.drugs)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg) by medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup_byHypertensionDrugs.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, group.by = "Hypertension.drugs", data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport) & !is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport) & !is.na(Hypertension.drugs)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension by medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.selfreport_byHypertensionDrugs.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.

compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, data = AEDB.CEA %>% filter(!is.na(SBPGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "SBPGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = SBPGroup), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.selfreport",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.selfreport), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.drugs, data = AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), 
                  x = c("Hypertension.drugs"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Hypertension medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.HypertensionDrugs.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(SBPGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.drugs, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.drugs)), 
                  x = c("Hypertension.drugs"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Hypertension medication use per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.drugs_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ SBPGroup, group.by = "Hypertension.drugs", data = AEDB.CEA %>% filter(!is.na(SBPGroup) & !is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SBPGroup) & !is.na(Hypertension.drugs)), 
                  x = c("SBPGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Systolic blood pressure (mmHg) by medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.SBPGroup_byHypertensionDrugs.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypertension.selfreport, group.by = "Hypertension.drugs", data = AEDB.CEA %>% filter(!is.na(Hypertension.selfreport) & !is.na(Hypertension.drugs)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypertension.selfreport) & !is.na(Hypertension.drugs)), 
                  x = c("Hypertension.selfreport"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Self-reported hypertension by medication use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypertension.drugs",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Hypertension.drugs), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypertension.selfreport_byHypertensionDrugs.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Hypercholesterolemia & LDL levels

We want to create figures of MCP1 levels stratified by hypercholesterolemia/LDL-levels, and use of lipid-lowering drugs.

  • Box and Whisker plot for MCP-1 plaque levels by hypercholesterolemia (risk614) group (no, yes)
  • Box and Whisker plot for MCP-1 plaque levels by lipid-lowering drugs group (no, yes)
  • Box and Whisker plot for MCP-1 plaque levels by LDL-levels (mmol/L) group (<100, 100-129, 130-159, 160-189, 190+)
library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(LDLGroup = factor(case_when(LDL_finalCU < 100 ~ "<100",
                                                     LDL_finalCU >= 100  & LDL_finalCU <= 129 ~ "100-129",
                                                     LDL_finalCU >= 130  & LDL_finalCU <= 159 ~ "130-159",
                                                     LDL_finalCU >= 160  & LDL_finalCU <= 189 ~ "160-189",
                                                     LDL_finalCU >= 190 ~ "190+"))) 


table(AEDB.CEA$LDLGroup, AEDB.CEA$Gender)
         
          female male
  <100       171  441
  100-129     96  250
  130-159     75  129
  160-189     40   50
  190+        25   31
require(sjlabelled)
AEDB.CEA$risk614 <- to_factor(AEDB.CEA$risk614)

# Fix plaquephenotypes
attach(AEDB.CEA)
AEDB.CEA[,"Hypercholesterolemia"] <- NA
AEDB.CEA$Hypercholesterolemia[risk614 == "missing value"] <- NA
AEDB.CEA$Hypercholesterolemia[risk614 == -999] <- NA
AEDB.CEA$Hypercholesterolemia[risk614 == "no"] <- "no"
AEDB.CEA$Hypercholesterolemia[risk614 == "yes"] <- "yes"
detach(AEDB.CEA)

table(AEDB.CEA$risk614, AEDB.CEA$Hypercholesterolemia)
               
                  no  yes
  missing value    0    0
  no             648    0
  yes              0 1563
# AEDB.temp <- subset(AEDB,  select = c("STUDY_NUMBER", "UPID", "Age", "Gender", "Hospital", "Artery_summary", "risk614", "Hypercholesterolemia"))
# require(labelled)
# AEDB.temp$Gender <- to_factor(AEDB.temp$Gender)
# AEDB.temp$Hospital <- to_factor(AEDB.temp$Hospital)
# AEDB.temp$Artery_summary <- to_factor(AEDB.temp$Artery_summary)
# 
# DT::datatable(AEDB.temp[1:10,], caption = "Excerpt of the whole AEDB.", rownames = FALSE)
# 
# rm(AEDB.temp)

Now we can draw some graphs of plaque MCP1 levels per sex and hypercholesterolemia/LDL-levels group, as well as stratified by lipid-lowering drugs users.

Inverse-rank transformed data

compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, data = AEDB.CEA %>% filter(!is.na(LDLGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "LDLGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(LDLGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byGender.pdf"), plot = last_plot())



compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypercholesterolemia",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypercholesterolemia.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypercholesterolemia_byGender.pdf"), plot = last_plot())


compare_means(MCP1_pg_ml_2015_rank ~ Med.Statin.LLD, data = AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), 
                  x = c("Med.Statin.LLD"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Lipid-lowering drug use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Med.Statin.LLD.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Med.Statin.LLD, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), 
                  x = c("Med.Statin.LLD"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Lipid-lowering drug use per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Med.Statin.LLD_byGender.pdf"), plot = last_plot())




compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, group.by = "Med.Statin.LLD", data = AEDB.CEA %>% filter(!is.na(LDLGroup) & !is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup) & !is.na(Med.Statin.LLD)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per LLD use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Med.Statin.LLD), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byMed.Statin.LLD.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, group.by = "Med.Statin.LLD", data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia) & !is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia) & !is.na(Med.Statin.LLD)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia per LLD use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Med.Statin.LLD), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byMed.Statin.LLD.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.

compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, data = AEDB.CEA %>% filter(!is.na(LDLGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "LDLGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(LDLGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Hypercholesterolemia",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypercholesterolemia.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Hypercholesterolemia_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Med.Statin.LLD, data = AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), 
                  x = c("Med.Statin.LLD"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Lipid-lowering drug use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Med.Statin.LLD.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Med.Statin.LLD, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Med.Statin.LLD)), 
                  x = c("Med.Statin.LLD"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Lipid-lowering drug use per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Med.Statin.LLD_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ LDLGroup, group.by = "Med.Statin.LLD", data = AEDB.CEA %>% filter(!is.na(LDLGroup) & !is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(LDLGroup) & !is.na(Med.Statin.LLD)), 
                  x = c("LDLGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "LDL (mg/dL) per LLD use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Med.Statin.LLD), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byMed.Statin.LLD.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Hypercholesterolemia, group.by = "Med.Statin.LLD", data = AEDB.CEA %>% filter(!is.na(Hypercholesterolemia) & !is.na(Med.Statin.LLD)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(Hypercholesterolemia) & !is.na(Med.Statin.LLD)), 
                  x = c("Hypercholesterolemia"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diagnosed hypercholesterolemia per LLD use",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Med.Statin.LLD",
                  palette = c("#49A01D", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Med.Statin.LLD), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.LDLGroups_byMed.Statin.LLD.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Kidney function (eGFR)

We want to create figures of MCP1 levels stratified by kidney function.

  • Box and Whisker plot for MCP-1 plaque levels by chronic kidney disease (CKD) group (1, 2, 3, 4, 5)
  • Box and Whisker plot for MCP-1 plaque levels by eGFR (MDRD-based) group (90+, 60-89, 30-59, <30)
library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(eGFRGroup = factor(case_when(GFR_MDRD < 15 ~ "<15",
                                                             GFR_MDRD >= 15  & GFR_MDRD <= 29 ~ "15-29",
                                                             GFR_MDRD >= 30  & GFR_MDRD <= 59 ~ "30-59",
                                                             GFR_MDRD >= 60  & GFR_MDRD <= 89 ~ "60-89",
                                                             GFR_MDRD >= 90 ~ "90+")))

table(AEDB.CEA$eGFRGroup, AEDB.CEA$Gender)
       
        female male
  <15        3    7
  15-29      7   20
  30-59    193  325
  60-89    361  845
  90+      117  345
table(AEDB.CEA$eGFRGroup, AEDB.CEA$KDOQI)
       
        No data available/missing Normal kidney function CKD 2 (Mild) CKD 3 (Moderate) CKD 4 (Severe) CKD 5 (Failure)
  <15                           0                      0            0                0              0              10
  15-29                         0                      0            0                0             27               0
  30-59                         0                      0            0              518              0               0
  60-89                         0                      0         1206                0              0               0
  90+                           0                    462            0                0              0               0

Now we can draw some graphs of plaque MCP1 levels per sex and kidney function group.

Inverse-rank transformed data


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, data = AEDB.CEA %>% filter(!is.na(eGFRGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "eGFRGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(eGFRGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR_byGender.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ KDOQI, data = AEDB.CEA %>% filter(!is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(KDOQI)), 
                  x = c("KDOQI"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Kidney function (KDOQI)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "KDOQI",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = KDOQI), label = "p.format", method = "kruskal.test")
ggpar(p1 + rotate_x_text(45), legend = "right") 
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.KDOQI.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ KDOQI, group.by = "Gender",  data = AEDB.CEA %>% filter(!is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(KDOQI)), 
                  x = c("KDOQI"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Kidney function (KDOQI) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggpar(p1 + rotate_x_text(45), legend = "right") 
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.KDOQI_byGender.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, data = AEDB.CEA %>% filter(!is.na(eGFRGroup) & !is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup) & !is.na(KDOQI)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2) by KDOQI group",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "KDOQI",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggpar(p1, legend = "right")
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR_KDOQI.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, data = AEDB.CEA %>% filter(!is.na(eGFRGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "eGFRGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(eGFRGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ KDOQI, data = AEDB.CEA %>% filter(!is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(KDOQI)), 
                  x = c("KDOQI"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Kidney function (KDOQI)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "KDOQI",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(aes(group = KDOQI), label = "p.format", method = "kruskal.test")
ggpar(p1 + rotate_x_text(45), legend = "right") 
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.KDOQI.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ KDOQI, group.by = "Gender",  data = AEDB.CEA %>% filter(!is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(KDOQI)), 
                  x = c("KDOQI"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Kidney function (KDOQI) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggpar(p1 + rotate_x_text(45), legend = "right") 
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.KDOQI_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ eGFRGroup, data = AEDB.CEA %>% filter(!is.na(eGFRGroup) & !is.na(KDOQI)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(eGFRGroup) & !is.na(KDOQI)), 
                  x = c("eGFRGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "eGFR (mL/min per 1.73 m2) by KDOQI group",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "KDOQI",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggpar(p1, legend = "right")
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.EGFR_KDOQI.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

BMI

We want to create figures of MCP1 levels stratified by BMI.

  • Box and Whisker plot for MCP-1 plaque levels by BMI WHO group (underweight, normal, overweight, obese)
  • Box and Whisker plot for MCP-1 plaque levels by BMI group (<18.5, 18.5-24.9, 25, 29.9, 30-24.9, 35+)
library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(BMIGroup = factor(case_when(BMI < 18.5 ~ "<18.5",
                                                     BMI >= 18.5  & BMI < 25 ~ "18.5-24",
                                                     BMI >= 25  & BMI < 30 ~ "25-29",
                                                     BMI >= 30  & BMI < 35 ~ "30-35",
                                                     BMI >= 35 ~ "35+"))) 

# require(labelled)
# AEDB.CEA$BMI_US <- as_factor(AEDB.CEA$BMI_US)
# AEDB.CEA$BMI_WHO <- as_factor(AEDB.CEA$BMI_WHO)
# table(AEDB.CEA$BMI_WHO, AEDB.CEA$BMI_US)

table(AEDB.CEA$BMIGroup, AEDB.CEA$Gender)
         
          female male
  <18.5       17    8
  18.5-24    277  574
  25-29      267  786
  30-35       99  189
  35+         32   32
table(AEDB.CEA$BMIGroup, AEDB.CEA$BMI_WHO)
         
          No data available/missing Underweight Normal Overweight Obese
  <18.5                           0          24      0          0     0
  18.5-24                         0           0    851          0     0
  25-29                           0           0      0       1052     0
  30-35                           0           0      0          0   288
  35+                             0           0      0          0    64

Now we can draw some graphs of plaque MCP1 levels per sex and age group.

Inverse-rank transformed data

MCP1 plaque levels


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup,  data = AEDB.CEA %>% filter(!is.na(BMIGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "BMIGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(BMIGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI_byGender.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup, data = AEDB.CEA %>% filter(!is.na(BMIGroup) & !is.na(BMI_WHO)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup) & !is.na(BMI_WHO)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2) per WHO categories",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "BMI_WHO",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggpar(p1, legend = "right")
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI_byWHO.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup,  data = AEDB.CEA %>% filter(!is.na(BMIGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2)",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "BMIGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(BMIGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2) per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ BMIGroup, data = AEDB.CEA %>% filter(!is.na(BMIGroup) & !is.na(BMI_WHO)), method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(BMIGroup) & !is.na(BMI_WHO)), 
                  x = c("BMIGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "BMI groups (kg/m2) per WHO categories",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "BMI_WHO",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(method = "kruskal.test")
ggpar(p1, legend = "right")
rm(p1)
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.BMI_byWHO.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Diabetes

We want to create figures of MCP1 levels stratified by type 2 diabetes.

  • Box and Whisker plot for MCP-1 plaque levels by type 2 diabetes group (no, yes)

Now we can draw some graphs of plaque MCP1 levels per sex and age group.

Inverse-rank transformed data


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ DiabetesStatus,  data = AEDB.CEA %>% filter(!is.na(DiabetesStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(DiabetesStatus)), 
                  x = c("DiabetesStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diabetes status",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "DiabetesStatus",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Diabetes.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ DiabetesStatus, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(DiabetesStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(DiabetesStatus)), 
                  x = c("DiabetesStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diabetes status per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Diabetes_byGender.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ DiabetesStatus,  data = AEDB.CEA %>% filter(!is.na(DiabetesStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(DiabetesStatus)), 
                  x = c("DiabetesStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diabetes status",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "DiabetesStatus",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Diabetes.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ DiabetesStatus, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(DiabetesStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(DiabetesStatus)), 
                  x = c("DiabetesStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Diabetes status per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Diabetes_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Smoking

We want to create figures of MCP1 levels stratified by smoking.

  • Box and Whisker plot for MCP-1 plaque levels by smoking group (never, ex, current)

Now we can draw some graphs of plaque MCP1 levels per sex and age group.

Inverse-rank transformed data


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ SmokerStatus,  data = AEDB.CEA %>% filter(!is.na(SmokerStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SmokerStatus)), 
                  x = c("SmokerStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Smoker status",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "SmokerStatus",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Smoking.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ SmokerStatus, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(SmokerStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SmokerStatus)), 
                  x = c("SmokerStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Smoker status per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Smoking_byGender.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ SmokerStatus,  data = AEDB.CEA %>% filter(!is.na(SmokerStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SmokerStatus)), 
                  x = c("SmokerStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Smoker status",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "SmokerStatus",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Smoking.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ SmokerStatus, group.by = "Gender", data = AEDB.CEA %>% filter(!is.na(SmokerStatus)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(SmokerStatus)), 
                  x = c("SmokerStatus"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Smoker status per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Smoking_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Stenosis

We want to create figures of MCP1 levels stratified by stenosis grade.

  • Box and Whisker plot for MCP-1 plaque levels by stenosis grade group (<70, 70-89, 90+)
library(dplyr)

AEDB.CEA <- AEDB.CEA %>% mutate(StenoticGroup = factor(case_when(stenose == "0-49%" ~ "<70",
                                                     stenose == "0-49%" ~ "<70",
                                                     stenose == "50-70%" ~ "<70",
                                                     stenose == "70-90%" ~ "70-89",
                                                     stenose == "50-99%" ~ "90+",
                                                     stenose == "70-99%" ~ "90+",
                                                     stenose == "100% (Occlusion)" ~ "90+",
                                                     stenose == "90-99%" ~ "90+")))

table(AEDB.CEA$StenoticGroup, AEDB.CEA$Gender)
       
        female male
  <70       46  157
  70-89    365  762
  90+      316  726
table(AEDB.CEA$stenose, AEDB.CEA$StenoticGroup)
                  
                    <70 70-89  90+
  missing             0     0    0
  0-49%              13     0    0
  50-70%            190     0    0
  70-90%              0  1127    0
  90-99%              0     0  928
  100% (Occlusion)    0     0   31
  NA                  0     0    0
  50-99%              0     0   15
  70-99%              0     0   68
  99                  0     0    0

Now we can draw some graphs of plaque MCP1 levels per sex and age group.

Inverse-rank transformed data


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ StenoticGroup,  data = AEDB.CEA %>% filter(!is.na(StenoticGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(StenoticGroup)), 
                  x = c("StenoticGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Stenotic grade",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "StenoticGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Stenosis.pdf"), plot = last_plot())

compare_means(MCP1_pg_ml_2015_rank ~ StenoticGroup, group.by ="Gender", data = AEDB.CEA %>% filter(!is.na(StenoticGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(StenoticGroup)), 
                  x = c("StenoticGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Stenotic grade per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Stenosis_byGender.pdf"), plot = last_plot())

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# Global test
compare_means(MCP1_pg_ml_2015_rank ~ StenoticGroup,  data = AEDB.CEA %>% filter(!is.na(StenoticGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(StenoticGroup)), 
                  x = c("StenoticGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Stenotic grade",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  # color = "Gender",
                  # palette = c("#D5267B", "#1290D9"),
                  color = "StenoticGroup",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Stenosis.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ StenoticGroup, group.by ="Gender", data = AEDB.CEA %>% filter(!is.na(StenoticGroup)), method = "kruskal.test")
ggpubr::ggboxplot(AEDB.CEA %>% filter(!is.na(StenoticGroup)), 
                  x = c("StenoticGroup"),
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Stenotic grade per gender",
                  ylab = "MCP1 plaque [pg/mL]\n(inverse-rank transformation)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format", method = "kruskal.test")
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.Stenosis_byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Plaque vs. plaque MCP1 levels

We will also make a nice correlation plot between the two experiments of plaque MCP1 levels.

AEDB.CEA$MCP1_rank <- qnorm((rank(AEDB.CEA$MCP1, na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA$MCP1)))
summary(AEDB.CEA$MCP1)
summary(AEDB.CEA$MCP1_pg_ug_2015)

ggpubr::ggscatter(AEDB.CEA, 
                  x = "MCP1", 
                  y = "MCP1_pg_ml_2015",
                  xlab = "MCP1 plaque [pg/mL] (exp. no. 1)",
                  ylab = "MCP1 plaque [pg/mL] (exp. no. 2)",
                  add = "reg.line", add.params = list(color = "#1290D9"),
                  conf.int = TRUE,
                  cor.coef = TRUE, cor.coeff.args = list(method = "spearman"))
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque_vs_plaque.raw.pdf"), plot = last_plot())

ggpubr::ggscatter(AEDB.CEA, 
                  x = "MCP1_rank", 
                  y = "MCP1_pg_ml_2015_rank",
                  xlab = "MCP1 plaque [pg/mL] (exp. no. 1)",
                  ylab = "MCP1 plaque [pg/mL] (exp. no. 2)",
                  add = "reg.line", add.params = list(color = "#1290D9"),
                  conf.int = TRUE,
                  cor.coef = TRUE, cor.coeff.args = list(method = "spearman"))
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque_vs_plaque.rank.pdf"), plot = last_plot())

Symptoms

We want to create per-symptom figures.

library(dplyr)

table(AEDB.CEA$AgeGroup, AEDB.CEA$AsymptSympt2G)
       
        Asymptomatic Symptomatic
  <55             24         119
  55-64           76         528
  65-74          124         827
  75-84           43         598
  85+              3          81
table(AEDB.CEA$Gender, AEDB.CEA$AsymptSympt2G)
        
         Asymptomatic Symptomatic
  female           64         675
  male            206        1478
table(AEDB.CEA$AsymptSympt2G)

Asymptomatic  Symptomatic 
         270         2153 

Inverse-rank transformed data

Now we can draw some graphs of plaque MCP1 levels per symptom group.


# ?ggpubr::ggboxplot()
my_comparisons <- list(c("Asymptomatic", "Symptomatic"))

p1 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "AsymptSympt2G", y = "MCP1_pg_ml_2015_rank",
                  title = "MCP1 plaque [pg/mL] levels per symptom", 
                  xlab = "Symptoms",
                  ylab = "MCP1 plaque [pg/mL]\n inverse-rank transformation",
                  color = "AsymptSympt2G", 
                  # palette = c(uithof_color[16], uithof_color[23]),
                  palette = "npg",
                  add = "dotplot", # Add dotplot
                  add.params = list(binwidth = 0.1, dotsize = 0.3)
          ) +
  stat_compare_means(comparisons = my_comparisons, method = "wilcox.test")
ggpar(p1, legend = c("right"), legend.title = "Symptoms")

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AsymptSympt2G.pdf"), plot = last_plot())

rm(p1)

compare_means(MCP1_pg_ml_2015_rank ~ AsymptSympt2G, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "AsymptSympt2G", y = "MCP1_pg_ml_2015_rank",
                  title = "MCP1 plaque [pg/mL] levels per symptom by gender", 
                  xlab = "Symptoms",
                  ylab = "MCP1 plaque [pg/mL]\n inverse-rank transformation",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "dotplot", # Add dotplot
                  add.params = list(binwidth = 0.1, dotsize = 0.3)
          ) +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "wilcox.test")
ggpar(p1, legend = c("right"), legend.title = "Symptoms")

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AsymptSympt2G.byGender.pdf"), plot = last_plot())

rm(p1)

Raw data

Simalarly but now for the raw data as median ± interquartile range.


# ?ggpubr::ggboxplot()
my_comparisons <- list(c("Asymptomatic", "Symptomatic"))

p1 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "AsymptSympt2G", y = "MCP1_pg_ml_2015_rank",
                  title = "MCP1 plaque [pg/mL] levels per symptom", 
                  xlab = "Symptoms",
                  ylab = "MCP1 plaque [pg/mL]\n inverse-rank transformation",
                  color = "AsymptSympt2G", 
                  # palette = c(uithof_color[16], uithof_color[23]),
                  palette = "npg",
                  add = "dotplot", # Add dotplot
                  add.params = list(binwidth = 0.1, dotsize = 0.3)
          ) +
  stat_compare_means(comparisons = my_comparisons, method = "wilcox.test")
ggpar(p1, legend = c("right"), legend.title = "Symptoms")

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AsymptSympt2G.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(p1)

compare_means(MCP1_pg_ml_2015_rank ~ AsymptSympt2G, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "AsymptSympt2G", y = "MCP1_pg_ml_2015_rank",
                  title = "MCP1 plaque [pg/mL] levels per symptom by gender", 
                  xlab = "Symptoms",
                  ylab = "MCP1 plaque [pg/mL]\n inverse-rank transformation",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "dotplot", # Add dotplot
                  add.params = list(binwidth = 0.1, dotsize = 0.3)
          ) +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "wilcox.test")
ggpar(p1, legend = c("right"), legend.title = "Symptoms")

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.AsymptSympt2G.byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(p1)

Forest plots

We would also like to visualize the multivariable analyses results.

library(ggplot2)
library(openxlsx)
model1_mcp1 <- read.xlsx(paste0(OUT_loc, "/", Today, ".AEDB.CEA.Bin.Uni.Protein.RANK.Symptoms.MODEL1.xlsx"))
model2_mcp1 <- read.xlsx(paste0(OUT_loc, "/", Today, ".AEDB.CEA.Bin.Multi.Protein.RANK.Symptoms.MODEL2.xlsx"))
model1_mcp1$model <- "univariate"
model2_mcp1$model <- "multivariate"

models_mcp1 <- rbind(model1_mcp1, model2_mcp1)
models_mcp1
NA

Forest plot for experiment 2.

dat <- data.frame(group = factor(c("Age, sex-adjusted", "Age, sex, and adjusted for risk factors"), 
                           
                           levels=c("Age, sex, and adjusted for risk factors", "Age, sex-adjusted")),
                  cen = c(models_mcp1$OR[models_mcp1$Predictor=="MCP1_pg_ml_2015_rank"]),
                  low = c(models_mcp1$low95CI[models_mcp1$Predictor=="MCP1_pg_ml_2015_rank"]),
                  high = c(models_mcp1$up95CI[models_mcp1$Predictor=="MCP1_pg_ml_2015_rank"]))

fp <- ggplot(data = dat, aes(x = group, y = cen, ymin = low, ymax = high)) +
  geom_pointrange(linetype = 2, size = 1, colour = c("#1290D9", "#49A01D")) + 
  geom_hline(yintercept = 1, lty = 2) +  # add a dotted line at x=1 after flip
  coord_flip(ylim = c(0.8, 1.7)) +  # flip coordinates (puts labels on y axis)
  xlab("Model") + ylab("OR (95% CI) for symptomatic plaques") +
  ggtitle("Plaque MCP-1 levels (1 SD increment, exp. #2, n = 1190+)") +
  theme_minimal()  # use a white background
print(fp)

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.exp2.forest.pdf"), plot = fp)

rm(fp)

Forest plot for experiment 1.

dat <- data.frame(group = factor(c("Age, sex-adjusted", "Age, sex, and adjusted for risk factors"), 
                           
                           levels=c("Age, sex, and adjusted for risk factors", "Age, sex-adjusted")),
                  cen = c(models_mcp1$OR[models_mcp1$Predictor=="MCP1_rank"]),
                  low = c(models_mcp1$low95CI[models_mcp1$Predictor=="MCP1_rank"]),
                  high = c(models_mcp1$up95CI[models_mcp1$Predictor=="MCP1_rank"]))

fp <- ggplot(data = dat, aes(x = group, y = cen, ymin = low, ymax = high)) +
  geom_pointrange(linetype = 2, size = 1, colour = c("#1290D9", "#49A01D")) + 
  geom_hline(yintercept = 1, lty = 2) +  # add a dotted line at x=1 after flip
  coord_flip(ylim = c(0.8, 1.7)) +  # flip coordinates (puts labels on y axis)
  xlab("Model") + ylab("OR (95% CI) for symptomatic plaques") +
  ggtitle("Plaque MCP-1 levels (1 SD increment, exp. #1, n = 490+)") +
  theme_minimal()  # use a white background
print(fp)

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.exp1.forest.pdf"), plot = fp)

rm(fp)

MCP1 vs. cytokines plaque levels correlations

We will plot the correlations of other cytokine plaque levels to the MCP1 plaque levels. These include:

  • IL2
  • IL4
  • IL5
  • IL6
  • IL8
  • IL9
  • IL10
  • IL12
  • IL13
  • IL21
  • INFG
  • TNFA
  • MIF
  • MCP1
  • MIP1a
  • RANTES
  • MIG
  • IP10
  • Eotaxin1
  • TARC
  • PARC
  • MDC
  • OPG
  • sICAM1
  • VEGFA
  • TGFB

In addition we will look at three metalloproteinases which were measured using an activity assay.

  • MMP2
  • MMP8
  • MMP9

The proteins were measured using FACS and LUMINEX. Given the different platforms used (FACS vs. LUMINEX), we will inverse rank-normalize these variables as well to scale them to the same scale as the MCP1 plaque levels.

We will set the measurements that yielded ‘0’ to NA, as it is unlikely that any protein ever has exactly 0 copies. The ‘0’ yielded during the experiment are due to the limits of the detection.

Prepare data

cytokines <- c("IL2", "IL4", "IL5", "IL6", "IL8", "IL9", "IL10", "IL12", "IL13", "IL21", 
               "INFG", "TNFA", "MIF", "MCP1", "MIP1a", "RANTES", "MIG", "IP10", "Eotaxin1", 
               "TARC", "PARC", "MDC", "OPG", "sICAM1", "VEGFA", "TGFB")
metalloproteinases <- c("MMP2", "MMP8", "MMP9")

# fix names
names(AEDB.CEA)[names(AEDB.CEA) == "VEFGA"] <- "VEGFA"


proteins_of_interest <- c(cytokines, metalloproteinases)

proteins_of_interest_rank = unlist(lapply(proteins_of_interest, paste0, "_rank"))


# make variables numerics()
AEDB.CEA <- AEDB.CEA %>%
  mutate_each(funs(as.numeric), proteins_of_interest)
funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas: 

  # Simple named list: 
  list(mean = mean, median = median)

  # Auto named with `tibble::lst()`: 
  tibble::lst(mean, median)

  # Using lambdas
  list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
This warning is displayed once per session.Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(proteins_of_interest)` instead of `proteins_of_interest` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
  
for(PROTEIN in 1:length(proteins_of_interest)){

  # UCORBIOGSAqc$Z <- NULL
  var.temp.rank = proteins_of_interest_rank[PROTEIN]
  var.temp = proteins_of_interest[PROTEIN]
  
  cat(paste0("\nSelecting ", var.temp, " and standardising: ", var.temp.rank,".\n"))
  cat(paste0("* changing ", var.temp, " to numeric.\n"))

  # AEDB.CEA <-  AEDB.CEA %>% mutate(AEDB.CEA[,var.temp] == replace(AEDB.CEA[,var.temp], AEDB.CEA[,var.temp]==0, NA))

  AEDB.CEA[,var.temp][AEDB.CEA[,var.temp]==0.000000]=NA

  cat(paste0("* standardising ", var.temp, 
             " (mean: ",round(mean(!is.na(AEDB.CEA[,var.temp])), digits = 6),
             ", n = ",sum(!is.na(AEDB.CEA[,var.temp])),").\n"))
  
  AEDB.CEA <- AEDB.CEA %>%
      mutate_at(vars(var.temp), 
        # list(Z = ~ (AEDB.CEA[,var.temp] - mean(AEDB.CEA[,var.temp], na.rm = TRUE))/sd(AEDB.CEA[,var.temp], na.rm = TRUE))
        list(RANK = ~ qnorm((rank(AEDB.CEA[,var.temp], na.last = "keep") - 0.5) / sum(!is.na(AEDB.CEA[,var.temp]))))
      )
  # str(UCORBIOGSAqc$Z)
  cat(paste0("* renaming RANK to ", var.temp.rank,".\n"))
  AEDB.CEA[,var.temp.rank] <- NULL
  names(AEDB.CEA)[names(AEDB.CEA) == "RANK"] <- var.temp.rank
}

Selecting IL2 and standardising: IL2_rank.
* changing IL2 to numeric.
* standardising IL2 (mean: 0.179942, n = 436).
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(var.temp)` instead of `var.temp` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
* renaming RANK to IL2_rank.

Selecting IL4 and standardising: IL4_rank.
* changing IL4 to numeric.
* standardising IL4 (mean: 0.167561, n = 406).
* renaming RANK to IL4_rank.

Selecting IL5 and standardising: IL5_rank.
* changing IL5 to numeric.
* standardising IL5 (mean: 0.178291, n = 432).
* renaming RANK to IL5_rank.

Selecting IL6 and standardising: IL6_rank.
* changing IL6 to numeric.
* standardising IL6 (mean: 0.188196, n = 456).
* renaming RANK to IL6_rank.

Selecting IL8 and standardising: IL8_rank.
* changing IL8 to numeric.
* standardising IL8 (mean: 0.182006, n = 441).
* renaming RANK to IL8_rank.

Selecting IL9 and standardising: IL9_rank.
* changing IL9 to numeric.
* standardising IL9 (mean: 0.206356, n = 500).
* renaming RANK to IL9_rank.

Selecting IL10 and standardising: IL10_rank.
* changing IL10 to numeric.
* standardising IL10 (mean: 0.158894, n = 385).
* renaming RANK to IL10_rank.

Selecting IL12 and standardising: IL12_rank.
* changing IL12 to numeric.
* standardising IL12 (mean: 0.167974, n = 407).
* renaming RANK to IL12_rank.

Selecting IL13 and standardising: IL13_rank.
* changing IL13 to numeric.
* standardising IL13 (mean: 0.232769, n = 564).
* renaming RANK to IL13_rank.

Selecting IL21 and standardising: IL21_rank.
* changing IL21 to numeric.
* standardising IL21 (mean: 0.233182, n = 565).
* renaming RANK to IL21_rank.

Selecting INFG and standardising: INFG_rank.
* changing INFG to numeric.
* standardising INFG (mean: 0.179117, n = 434).
* renaming RANK to INFG_rank.

Selecting TNFA and standardising: TNFA_rank.
* changing TNFA to numeric.
* standardising TNFA (mean: 0.163434, n = 396).
* renaming RANK to TNFA_rank.

Selecting MIF and standardising: MIF_rank.
* changing MIF to numeric.
* standardising MIF (mean: 0.233182, n = 565).
* renaming RANK to MIF_rank.

Selecting MCP1 and standardising: MCP1_rank.
* changing MCP1 to numeric.
* standardising MCP1 (mean: 0.229468, n = 556).
* renaming RANK to MCP1_rank.

Selecting MIP1a and standardising: MIP1a_rank.
* changing MIP1a to numeric.
* standardising MIP1a (mean: 0.211721, n = 513).
* renaming RANK to MIP1a_rank.

Selecting RANTES and standardising: RANTES_rank.
* changing RANTES to numeric.
* standardising RANTES (mean: 0.228642, n = 554).
* renaming RANK to RANTES_rank.

Selecting MIG and standardising: MIG_rank.
* changing MIG to numeric.
* standardising MIG (mean: 0.226991, n = 550).
* renaming RANK to MIG_rank.

Selecting IP10 and standardising: IP10_rank.
* changing IP10 to numeric.
* standardising IP10 (mean: 0.205943, n = 499).
* renaming RANK to IP10_rank.

Selecting Eotaxin1 and standardising: Eotaxin1_rank.
* changing Eotaxin1 to numeric.
* standardising Eotaxin1 (mean: 0.233182, n = 565).
* renaming RANK to Eotaxin1_rank.

Selecting TARC and standardising: TARC_rank.
* changing TARC to numeric.
* standardising TARC (mean: 0.200578, n = 486).
* renaming RANK to TARC_rank.

Selecting PARC and standardising: PARC_rank.
* changing PARC to numeric.
* standardising PARC (mean: 0.233182, n = 565).
* renaming RANK to PARC_rank.

Selecting MDC and standardising: MDC_rank.
* changing MDC to numeric.
* standardising MDC (mean: 0.209657, n = 508).
* renaming RANK to MDC_rank.

Selecting OPG and standardising: OPG_rank.
* changing OPG to numeric.
* standardising OPG (mean: 0.232769, n = 564).
* renaming RANK to OPG_rank.

Selecting sICAM1 and standardising: sICAM1_rank.
* changing sICAM1 to numeric.
* standardising sICAM1 (mean: 0.233182, n = 565).
* renaming RANK to sICAM1_rank.

Selecting VEGFA and standardising: VEGFA_rank.
* changing VEGFA to numeric.
* standardising VEGFA (mean: 0.201403, n = 488).
* renaming RANK to VEGFA_rank.

Selecting TGFB and standardising: TGFB_rank.
* changing TGFB to numeric.
* standardising TGFB (mean: 0.22988, n = 557).
* renaming RANK to TGFB_rank.

Selecting MMP2 and standardising: MMP2_rank.
* changing MMP2 to numeric.
* standardising MMP2 (mean: 0.231944, n = 562).
* renaming RANK to MMP2_rank.

Selecting MMP8 and standardising: MMP8_rank.
* changing MMP8 to numeric.
* standardising MMP8 (mean: 0.231944, n = 562).
* renaming RANK to MMP8_rank.

Selecting MMP9 and standardising: MMP9_rank.
* changing MMP9 to numeric.
* standardising MMP9 (mean: 0.231531, n = 561).
* renaming RANK to MMP9_rank.
# rm(var.temp, var.temp.rank)

Visualize transformations

We will just visualize these transformations.

proteins_of_interest_rank_mcp1 <- c("MCP1_pg_ml_2015_rank", proteins_of_interest_rank)

proteins_of_interest_mcp1 <- c("MCP1_pg_ml_2015", proteins_of_interest)

for(PROTEIN in proteins_of_interest_mcp1){
  cat(paste0("Plotting protein ", PROTEIN, ".\n"))
  
  p1 <- ggpubr::gghistogram(AEDB.CEA, PROTEIN,
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"),
                    add = "mean",
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2),
                    title = paste0(PROTEIN, " plaque levels"),
                    xlab = "",
                    ggtheme = theme_minimal())
  print(p1)
  
}
Plotting protein MCP1_pg_ml_2015.
Using `bins = 30` by default. Pick better value with the argument `bins`.
Plotting protein IL2.
Plotting protein IL4.
Plotting protein IL5.
Plotting protein IL6.
Plotting protein IL8.
Plotting protein IL9.
Plotting protein IL10.
Plotting protein IL12.
Plotting protein IL13.
Plotting protein IL21.
Plotting protein INFG.
Plotting protein TNFA.
Plotting protein MIF.
Plotting protein MCP1.
Plotting protein MIP1a.
Plotting protein RANTES.
Plotting protein MIG.
Plotting protein IP10.
Plotting protein Eotaxin1.
Plotting protein TARC.
Plotting protein PARC.
Plotting protein MDC.
Plotting protein OPG.
Plotting protein sICAM1.
Plotting protein VEGFA.
Plotting protein TGFB.
Plotting protein MMP2.
Plotting protein MMP8.
Plotting protein MMP9.

for(PROTEIN in proteins_of_interest_rank_mcp1){
  cat(paste0("Plotting protein ", PROTEIN, ".\n"))
  
  p1 <- ggpubr::gghistogram(AEDB.CEA, PROTEIN,
                    # y = "..count..",
                    color = "white",
                    fill = "Gender",
                    palette = c("#1290D9", "#DB003F"),
                    add = "mean",
                    # rug = TRUE,
                    # add.params =  list(color = "black", linetype = 2),
                    title = paste0(PROTEIN, " plaque levels"),
                    xlab = "inverse-normal transformation",
                    ggtheme = theme_minimal())
  print(p1)
  
}
Plotting protein MCP1_pg_ml_2015_rank.
Using `bins = 30` by default. Pick better value with the argument `bins`.
Plotting protein IL2_rank.
Plotting protein IL4_rank.
Plotting protein IL5_rank.
Plotting protein IL6_rank.
Plotting protein IL8_rank.
Plotting protein IL9_rank.
Plotting protein IL10_rank.
Plotting protein IL12_rank.
Plotting protein IL13_rank.
Plotting protein IL21_rank.
Plotting protein INFG_rank.
Plotting protein TNFA_rank.
Plotting protein MIF_rank.
Plotting protein MCP1_rank.
Plotting protein MIP1a_rank.
Plotting protein RANTES_rank.
Plotting protein MIG_rank.
Plotting protein IP10_rank.
Plotting protein Eotaxin1_rank.
Plotting protein TARC_rank.
Plotting protein PARC_rank.
Plotting protein MDC_rank.
Plotting protein OPG_rank.
Plotting protein sICAM1_rank.
Plotting protein VEGFA_rank.
Plotting protein TGFB_rank.
Plotting protein MMP2_rank.
Plotting protein MMP8_rank.
Plotting protein MMP9_rank.

NA

Correlations

Here we calculate correlations between MCP1_pg_ug_2015 and 28 other cytokines (including MCP1 as measured in experiment 1. We use Spearman’s test, thus, correlations a given in rho. Please note the indications of measurement methods:

  • L: LUMINEX
  • E: ELISA
  • a: activity assay
# Installation of ggcorrplot()
# --------------------------------
if(!require(devtools)) 
  install.packages("devtools")
devtools::install_github("kassambara/ggcorrplot")
Skipping install of 'ggcorrplot' from a github remote, the SHA1 (c46b4cce) has not changed since last install.
  Use `force = TRUE` to force installation
library(ggcorrplot)

# Creating matrix - inverse-rank transformation
# --------------------------------
AEDB.CEA.temp <- subset(AEDB.CEA, 
                          select = c(proteins_of_interest_rank_mcp1)
                                    )

# str(AEDB.CEA.temp)
AEDB.CEA.matrix.RANK <- as.matrix(AEDB.CEA.temp)
rm(AEDB.CEA.temp)

corr_biomarkers.rank <- round(cor(AEDB.CEA.matrix.RANK, 
                             use = "pairwise.complete.obs", #the correlation or covariance between each pair of variables is computed using all complete pairs of observations on those variables
                             method = "spearman"), 3)
# corr_biomarkers.rank

rename_proteins_of_interest_mcp1 <- c("MCP1 (L, exp2, pg/mL)", 
                                    "IL2", "IL4", "IL5", "IL6", "IL8", "IL9", "IL10", "IL12", 
                                    "IL13 (L)", "IL21 (L)", 
                                    "INFG", "TNFA", "MIF (L)", 
                                    "MCP1 (L, exp1)", "MIP1a (L)", "RANTES (L)", "MIG (L)", "IP10 (L)", 
                                    "Eotaxin1 (L)", "TARC (L)", "PARC (L)", "MDC (L)", 
                                    "OPG (L)", "sICAM1 (L)", "VEGFA (E)", "TGFB (E)", "MMP2 (a)", "MMP8 (a)", "MMP9 (a)")
colnames(corr_biomarkers.rank) <- c(rename_proteins_of_interest_mcp1)
rownames(corr_biomarkers.rank) <- c(rename_proteins_of_interest_mcp1)

corr_biomarkers_p.rank <- ggcorrplot::cor_pmat(AEDB.CEA.matrix.RANK, use = "pairwise.complete.obs", method = "spearman")
Cannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with tiesCannot compute exact p-value with ties
# ++++++++++++++++++++++++++++
# flattenCorrMatrix
# ++++++++++++++++++++++++++++
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor  =(cormat)[ut],
    p = pmat[ut]
    )
}

corr_biomarkers.rank.df <- flattenCorrMatrix(corr_biomarkers.rank, corr_biomarkers_p.rank)


names(corr_biomarkers.rank.df)[names(corr_biomarkers.rank.df) == "row"] <- "Cytokine_X"
names(corr_biomarkers.rank.df)[names(corr_biomarkers.rank.df) == "column"] <- "CytokineY"
names(corr_biomarkers.rank.df)[names(corr_biomarkers.rank.df) == "cor"] <- "SpearmanRho"

DT::datatable(corr_biomarkers.rank.df)


fwrite(corr_biomarkers.rank.df, file = paste0(OUT_loc, "/",Today,".correlation_cytokines.txt"))
# Add correlation coefficients
# --------------------------------
# argument lab = TRUE
p1 <- ggcorrplot(corr_biomarkers.rank, 
           method = "square", 
           type = "lower",
           title = "Cross biomarker correlations", 
           show.legend = TRUE, legend.title = bquote("Spearman's"~italic(rho)),
           ggtheme = ggplot2::theme_minimal, outline.color = "#FFFFFF",
           show.diag = TRUE,
           hc.order = FALSE, 
           lab = FALSE,
           digits = 3,
           tl.cex = 6,
           # xlab = c("MCP1"),
           # p.mat = corr_biomarkers_p.rank, sig.level = 0.05,
           colors = c("#1290D9", "#FFFFFF", "#E55738"))
p1
ggsave(filename = paste0(PLOT_loc, "/", Today, ".correlation_cytokines.png"), plot = last_plot())
Saving 7.29 x 4.51 in image
ggsave(filename = paste0(PLOT_loc, "/", Today, ".correlation_cytokines.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(p1)

While visually actractive we are not necessarily interested in the correlations between all the cytokines, rather of MCP1 with other cytokines only.

temp <- subset(corr_biomarkers.rank.df, Cytokine_X == "MCP1 (L, exp2, pg/mL)" )
temp$p_log10 <- -log10(temp$p)
p_threshold <- -log10(0.05/29)
p_threshold
[1] 2.763428
p1 <- ggbarplot(temp, x = "CytokineY", y = "SpearmanRho",
          fill = "CytokineY",               # change fill color by cyl
          # color = "white",            # Set bar border colors to white
          palette = uithof_color,            # jco journal color palett. see ?ggpar
          xlab = "Cytokine",
          ylab = expression("Spearman's"~italic(rho)),
          sort.val = "desc",          # Sort the value in dscending order
          sort.by.groups = FALSE,     # Don't sort inside each group
          x.text.angle = 45, # Rotate vertically x axis texts
          cex = 0.8
          )
ggpar(p1, legend = "bottom", 
      legend.title = "") +
  theme(axis.text.x = element_text(size = 9),
        axis.text.y = element_text(size = 9)) 

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.barplot_pgmL.MCP1_exp2_vs_Cytokines.png"), plot = last_plot())
Saving 7.29 x 4.51 in image
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.barplot_pgmL.MCP1_exp2_vs_Cytokines.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(p1)

temp <- subset(corr_biomarkers.rank.df, Cytokine_X == "MCP1 (L, exp1)" )
temp$p_log10 <- -log10(temp$p)
p_threshold <- -log10(0.05/29)
p_threshold
[1] 2.763428
p1 <- ggbarplot(temp, x = "CytokineY", y = "SpearmanRho",
          fill = "CytokineY",               # change fill color by cyl
          # color = "white",            # Set bar border colors to white
          palette = uithof_color,            # jco journal color palett. see ?ggpar
          xlab = "Cytokine",
          ylab = expression("Spearman's"~italic(rho)),
          sort.val = "desc",          # Sort the value in dscending order
          sort.by.groups = FALSE,     # Don't sort inside each group
          x.text.angle = 45, # Rotate vertically x axis texts
          cex = 0.8
          )
ggpar(p1, legend = "bottom", 
      legend.title = "") +
  theme(axis.text.x = element_text(size = 9),
        axis.text.y = element_text(size = 9)) 

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.barplot_pgmL.MCP1_exp1_vs_Cytokines.png"), plot = last_plot())
Saving 7.29 x 4.51 in image
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.barplot_pgmL.MCP1_exp1_vs_Cytokines.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(p1)

Another version - problably not good.

temp <- subset(corr_biomarkers.rank.df, Cytokine_X == "MCP1 (L, exp2, pg/mL)" )
temp$p_log10 <- -log10(temp$p)
p_threshold <- -log10(0.05/29)
p_threshold
[1] 2.763428
p1 <- ggdotchart(temp, x = "CytokineY", y = "p_log10",
           color = "CytokineY", #fill = "CytokineY",                              # Color by groups
           palette = uithof_color, # Custom color palette
           xlab = "Cytokine",
           ylab = expression(log[10]~"("~italic(p)~")-value"),
           ylim = c(0, 9),
           sorting = "descending",                       # Sort value in descending order
           add = "segments",                             # Add segments from y = 0 to dots
           rotate = FALSE,                                # Rotate vertically
           # group = "CytokineY",                                # Order by groups
           dot.size = 8,                                 # Large dot size
           label = round(temp$SpearmanRho, digits = 3),                        # Add mpg values as dot labels
           font.label = list(color = "white", size = 8, 
                             vjust = 0.5)                   
           )
ggpar(p1, legend = "", 
      legend.title = "") +
  theme(axis.text.x = element_text(size = 9),
        axis.text.y = element_text(size = 9))

ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.dotchart.MCP1_vs_Cytokines.png"), plot = last_plot())
Saving 7.29 x 4.51 in image
ggsave(file = paste0(PLOT_loc, "/",Today,".AEDB.CEA.MCP1.plaque.dotchart.MCP1_vs_Cytokines.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

rm(temp, p1)

MCP1 vs. cytokines plaque levels lm()

Model 1

In this model we correct for Age, Gender, and year of surgery.

Here we use the inverse-rank normalized data - visually this is more normally distributed.

Analysis of plaque cytokines traits as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 15, nrow = 0))
cat("Running linear regression...\n")
Running linear regression...
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(proteins_of_interest_rank)) {
    TRAIT = proteins_of_interest_rank[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M1) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    ### univariate
    fit <- lm(currentDF[,PROTEIN] ~ currentDF[,TRAIT] + Age + Gender + ORdate_year, data = currentDF)
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))

    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 15, nrow = 0))
    GLM.results.TEMP[1,] = GLM.CON(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing IL2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         439.52974            -0.08325             0.21160            -0.21965  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0911 -0.5531 -0.0990  0.4573  2.6749 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        450.388268 105.057037   4.287 2.37e-05 ***
currentDF[, TRAIT]  -0.079670   0.049891  -1.597   0.1112    
Age                  0.006158   0.005594   1.101   0.2718    
Gendermale           0.207882   0.105274   1.975   0.0491 *  
ORdate_year         -0.225272   0.052455  -4.295 2.29e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8921 on 336 degrees of freedom
Multiple R-squared:  0.06631,   Adjusted R-squared:  0.0552 
F-statistic: 5.966 on 4 and 336 DF,  p-value: 0.0001197

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL2_rank 
Effect size...............: -0.07967 
Standard error............: 0.049891 
Odds ratio (effect size)..: 0.923 
Lower 95% CI..............: 0.837 
Upper 95% CI..............: 1.018 
T-value...................: -1.596881 
P-value...................: 0.1112322 
R^2.......................: 0.066314 
Adjusted r^2..............: 0.055199 
Sample size of AE DB......: 2423 
Sample size of model......: 341 
Missing data %............: 85.92654 

- processing IL4_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          540.5738             -0.1171              0.1848             -0.2701  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0091 -0.5472 -0.1075  0.4856  2.6161 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        549.80994  111.55762   4.928 1.35e-06 ***
currentDF[, TRAIT]  -0.11149    0.05084  -2.193   0.0291 *  
Age                  0.00713    0.00565   1.262   0.2079    
Gendermale           0.17874    0.10843   1.648   0.1003    
ORdate_year         -0.27492    0.05570  -4.936 1.30e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8675 on 311 degrees of freedom
Multiple R-squared:  0.09242,   Adjusted R-squared:  0.08074 
F-statistic: 7.917 on 4 and 311 DF,  p-value: 4.345e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL4_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL4_rank 
Effect size...............: -0.111487 
Standard error............: 0.050839 
Odds ratio (effect size)..: 0.895 
Lower 95% CI..............: 0.81 
Upper 95% CI..............: 0.988 
T-value...................: -2.192931 
P-value...................: 0.02905265 
R^2.......................: 0.092417 
Adjusted r^2..............: 0.080744 
Sample size of AE DB......: 2423 
Sample size of model......: 316 
Missing data %............: 86.95832 

- processing IL5_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   503.0037       0.2535      -0.2513  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.99155 -0.54478 -0.07638  0.50816  2.54186 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        537.457180 106.206389   5.060 6.93e-07 ***
currentDF[, TRAIT]  -0.058497   0.048500  -1.206   0.2286    
Age                  0.007261   0.005456   1.331   0.1842    
Gendermale           0.238482   0.103166   2.312   0.0214 *  
ORdate_year         -0.268776   0.053031  -5.068 6.67e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8697 on 333 degrees of freedom
Multiple R-squared:  0.08729,   Adjusted R-squared:  0.07632 
F-statistic: 7.962 on 4 and 333 DF,  p-value: 3.862e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL5_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL5_rank 
Effect size...............: -0.058497 
Standard error............: 0.0485 
Odds ratio (effect size)..: 0.943 
Lower 95% CI..............: 0.858 
Upper 95% CI..............: 1.037 
T-value...................: -1.206137 
P-value...................: 0.2286207 
R^2.......................: 0.087288 
Adjusted r^2..............: 0.076324 
Sample size of AE DB......: 2423 
Sample size of model......: 338 
Missing data %............: 86.05035 

- processing IL6_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
        599.930101            0.073020            0.008033            0.319352           -0.300019  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8218 -0.5577 -0.1269  0.4803  2.9552 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        599.930101 102.191239   5.871 1.02e-08 ***
currentDF[, TRAIT]   0.073020   0.048887   1.494  0.13617    
Age                  0.008033   0.005661   1.419  0.15682    
Gendermale           0.319352   0.105481   3.028  0.00265 ** 
ORdate_year         -0.300019   0.051030  -5.879 9.69e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9062 on 347 degrees of freedom
Multiple R-squared:  0.1111,    Adjusted R-squared:  0.1008 
F-statistic: 10.84 on 4 and 347 DF,  p-value: 2.717e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL6_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL6_rank 
Effect size...............: 0.07302 
Standard error............: 0.048887 
Odds ratio (effect size)..: 1.076 
Lower 95% CI..............: 0.977 
Upper 95% CI..............: 1.184 
T-value...................: 1.493662 
P-value...................: 0.1361728 
R^2.......................: 0.111087 
Adjusted r^2..............: 0.10084 
Sample size of AE DB......: 2423 
Sample size of model......: 352 
Missing data %............: 85.47255 

- processing IL8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          697.4928              0.2632              0.3070             -0.3484  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1950 -0.5389 -0.0682  0.4695  2.8229 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        705.900501  95.458877   7.395 1.13e-12 ***
currentDF[, TRAIT]   0.260289   0.048081   5.414 1.18e-07 ***
Age                  0.004083   0.005398   0.756  0.44998    
Gendermale           0.309080   0.102061   3.028  0.00265 ** 
ORdate_year         -0.352754   0.047664  -7.401 1.09e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8578 on 337 degrees of freedom
Multiple R-squared:  0.1946,    Adjusted R-squared:  0.1851 
F-statistic: 20.36 on 4 and 337 DF,  p-value: 4.877e-15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL8_rank 
Effect size...............: 0.260289 
Standard error............: 0.048081 
Odds ratio (effect size)..: 1.297 
Lower 95% CI..............: 1.181 
Upper 95% CI..............: 1.426 
T-value...................: 5.413579 
P-value...................: 1.175805e-07 
R^2.......................: 0.194641 
Adjusted r^2..............: 0.185082 
Sample size of AE DB......: 2423 
Sample size of model......: 342 
Missing data %............: 85.88527 

- processing IL9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          392.8674              0.0749              0.3238             -0.1964  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0238 -0.5958 -0.1203  0.5313  2.9019 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        396.752588  88.227745   4.497  9.2e-06 ***
currentDF[, TRAIT]   0.077561   0.049808   1.557   0.1203    
Age                  0.002510   0.005644   0.445   0.6568    
Gendermale           0.322682   0.104664   3.083   0.0022 ** 
ORdate_year         -0.198406   0.044047  -4.504  8.9e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.944 on 376 degrees of freedom
Multiple R-squared:  0.07918,   Adjusted R-squared:  0.06939 
F-statistic: 8.083 on 4 and 376 DF,  p-value: 2.921e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL9_rank 
Effect size...............: 0.077561 
Standard error............: 0.049808 
Odds ratio (effect size)..: 1.081 
Lower 95% CI..............: 0.98 
Upper 95% CI..............: 1.191 
T-value...................: 1.557216 
P-value...................: 0.1202604 
R^2.......................: 0.079185 
Adjusted r^2..............: 0.069389 
Sample size of AE DB......: 2423 
Sample size of model......: 381 
Missing data %............: 84.27569 

- processing IL10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   506.2501       0.2847      -0.2530  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.94534 -0.57186 -0.08303  0.49245  2.61786 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        532.461068 120.554405   4.417 1.41e-05 ***
currentDF[, TRAIT]  -0.050056   0.054193  -0.924   0.3564    
Age                  0.006172   0.005829   1.059   0.2905    
Gendermale           0.263904   0.112020   2.356   0.0191 *  
ORdate_year         -0.266274   0.060183  -4.424 1.36e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8827 on 296 degrees of freedom
Multiple R-squared:  0.08049,   Adjusted R-squared:  0.06807 
F-statistic: 6.478 on 4 and 296 DF,  p-value: 5.213e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL10_rank 
Effect size...............: -0.050056 
Standard error............: 0.054193 
Odds ratio (effect size)..: 0.951 
Lower 95% CI..............: 0.855 
Upper 95% CI..............: 1.058 
T-value...................: -0.923655 
P-value...................: 0.356418 
R^2.......................: 0.080495 
Adjusted r^2..............: 0.068069 
Sample size of AE DB......: 2423 
Sample size of model......: 301 
Missing data %............: 87.57738 

- processing IL12_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         548.41879            -0.08958             0.24946            -0.27403  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.96858 -0.54923 -0.09087  0.49552  2.65880 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        558.567899 112.807135   4.952 1.21e-06 ***
currentDF[, TRAIT]  -0.083006   0.050937  -1.630   0.1042    
Age                  0.007858   0.005673   1.385   0.1670    
Gendermale           0.236909   0.106987   2.214   0.0275 *  
ORdate_year         -0.279354   0.056321  -4.960 1.16e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8673 on 311 degrees of freedom
Multiple R-squared:  0.09053,   Adjusted R-squared:  0.07883 
F-statistic: 7.739 on 4 and 311 DF,  p-value: 5.887e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL12_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL12_rank 
Effect size...............: -0.083006 
Standard error............: 0.050937 
Odds ratio (effect size)..: 0.92 
Lower 95% CI..............: 0.833 
Upper 95% CI..............: 1.017 
T-value...................: -1.629574 
P-value...................: 0.104204 
R^2.......................: 0.090531 
Adjusted r^2..............: 0.078833 
Sample size of AE DB......: 2423 
Sample size of model......: 316 
Missing data %............: 86.95832 

- processing IL13_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         408.84038             0.08096             0.26397            -0.20434  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.99901 -0.62198 -0.08861  0.53175  2.85876 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        417.755559  83.585739   4.998 8.46e-07 ***
currentDF[, TRAIT]   0.086418   0.045707   1.891  0.05934 .  
Age                  0.004672   0.005140   0.909  0.36389    
Gendermale           0.260898   0.095552   2.730  0.00659 ** 
ORdate_year         -0.208944   0.041733  -5.007 8.10e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9196 on 429 degrees of freedom
Multiple R-squared:  0.07553,   Adjusted R-squared:  0.06691 
F-statistic: 8.762 on 4 and 429 DF,  p-value: 8.314e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL13_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL13_rank 
Effect size...............: 0.086418 
Standard error............: 0.045707 
Odds ratio (effect size)..: 1.09 
Lower 95% CI..............: 0.997 
Upper 95% CI..............: 1.192 
T-value...................: 1.890677 
P-value...................: 0.05934115 
R^2.......................: 0.075528 
Adjusted r^2..............: 0.066908 
Sample size of AE DB......: 2423 
Sample size of model......: 434 
Missing data %............: 82.08832 

- processing IL21_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         404.39405             0.06671             0.26022            -0.20212  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.98297 -0.61654 -0.06537  0.53462  2.88093 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        412.360885  83.370793   4.946 1.09e-06 ***
currentDF[, TRAIT]   0.071706   0.046064   1.557  0.12028    
Age                  0.004476   0.005115   0.875  0.38204    
Gendermale           0.257574   0.095475   2.698  0.00725 ** 
ORdate_year         -0.206243   0.041624  -4.955 1.04e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9198 on 430 degrees of freedom
Multiple R-squared:  0.07309,   Adjusted R-squared:  0.06447 
F-statistic: 8.477 on 4 and 430 DF,  p-value: 1.368e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL21_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL21_rank 
Effect size...............: 0.071706 
Standard error............: 0.046064 
Odds ratio (effect size)..: 1.074 
Lower 95% CI..............: 0.982 
Upper 95% CI..............: 1.176 
T-value...................: 1.556674 
P-value...................: 0.1202837 
R^2.......................: 0.073091 
Adjusted r^2..............: 0.064469 
Sample size of AE DB......: 2423 
Sample size of model......: 435 
Missing data %............: 82.04705 

- processing INFG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         624.40653            -0.09079             0.29372            -0.31196  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.95225 -0.57294 -0.08409  0.49377  2.82516 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        633.635976 109.178351   5.804 1.52e-08 ***
currentDF[, TRAIT]  -0.086460   0.054878  -1.576  0.11609    
Age                  0.007030   0.005603   1.255  0.21048    
Gendermale           0.291357   0.106617   2.733  0.00662 ** 
ORdate_year         -0.316806   0.054506  -5.812 1.45e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8871 on 331 degrees of freedom
Multiple R-squared:  0.1125,    Adjusted R-squared:  0.1017 
F-statistic: 10.49 on 4 and 331 DF,  p-value: 5.21e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' INFG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: INFG_rank 
Effect size...............: -0.08646 
Standard error............: 0.054878 
Odds ratio (effect size)..: 0.917 
Lower 95% CI..............: 0.824 
Upper 95% CI..............: 1.021 
T-value...................: -1.575507 
P-value...................: 0.1160946 
R^2.......................: 0.11247 
Adjusted r^2..............: 0.101745 
Sample size of AE DB......: 2423 
Sample size of model......: 336 
Missing data %............: 86.13289 

- processing TNFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   550.1031       0.2622      -0.2749  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.89787 -0.54287 -0.04567  0.49646  2.58480 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        576.966996 112.824162   5.114 5.63e-07 ***
currentDF[, TRAIT]  -0.046024   0.050896  -0.904   0.3666    
Age                  0.007178   0.005690   1.262   0.2081    
Gendermale           0.244660   0.106867   2.289   0.0227 *  
ORdate_year         -0.288518   0.056336  -5.121 5.42e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8595 on 301 degrees of freedom
Multiple R-squared:  0.09809,   Adjusted R-squared:  0.08611 
F-statistic: 8.184 on 4 and 301 DF,  p-value: 2.814e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TNFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TNFA_rank 
Effect size...............: -0.046024 
Standard error............: 0.050896 
Odds ratio (effect size)..: 0.955 
Lower 95% CI..............: 0.864 
Upper 95% CI..............: 1.055 
T-value...................: -0.904282 
P-value...................: 0.3665688 
R^2.......................: 0.098094 
Adjusted r^2..............: 0.086109 
Sample size of AE DB......: 2423 
Sample size of model......: 306 
Missing data %............: 87.37103 

- processing MIF_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   402.1448       0.2706      -0.2010  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.91129 -0.60262 -0.06228  0.55583  2.96602 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        357.525975  91.070212   3.926 0.000101 ***
currentDF[, TRAIT]   0.067646   0.048881   1.384 0.167107    
Age                  0.004041   0.005094   0.793 0.428030    
Gendermale           0.264634   0.095298   2.777 0.005727 ** 
ORdate_year         -0.178868   0.045459  -3.935 9.71e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9203 on 430 degrees of freedom
Multiple R-squared:  0.072, Adjusted R-squared:  0.06337 
F-statistic: 8.341 on 4 and 430 DF,  p-value: 1.737e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIF_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIF_rank 
Effect size...............: 0.067646 
Standard error............: 0.048881 
Odds ratio (effect size)..: 1.07 
Lower 95% CI..............: 0.972 
Upper 95% CI..............: 1.178 
T-value...................: 1.383899 
P-value...................: 0.1671073 
R^2.......................: 0.072001 
Adjusted r^2..............: 0.063368 
Sample size of AE DB......: 2423 
Sample size of model......: 435 
Missing data %............: 82.04705 

- processing MCP1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          305.3839              0.2222              0.2393             -0.1527  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1835 -0.6174 -0.0939  0.5408  2.9516 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        313.648565  82.705400   3.792 0.000171 ***
currentDF[, TRAIT]   0.225302   0.043745   5.150 3.98e-07 ***
Age                  0.004970   0.004986   0.997 0.319495    
Gendermale           0.236381   0.093216   2.536 0.011574 *  
ORdate_year         -0.156994   0.041291  -3.802 0.000164 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8911 on 426 degrees of freedom
Multiple R-squared:  0.1224,    Adjusted R-squared:  0.1142 
F-statistic: 14.86 on 4 and 426 DF,  p-value: 2.248e-11

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MCP1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MCP1_rank 
Effect size...............: 0.225302 
Standard error............: 0.043745 
Odds ratio (effect size)..: 1.253 
Lower 95% CI..............: 1.15 
Upper 95% CI..............: 1.365 
T-value...................: 5.150371 
P-value...................: 3.98173e-07 
R^2.......................: 0.122428 
Adjusted r^2..............: 0.114188 
Sample size of AE DB......: 2423 
Sample size of model......: 431 
Missing data %............: 82.21213 

- processing MIP1a_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         393.90745             0.08625             0.30123            -0.19690  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0188 -0.6276 -0.0954  0.5264  2.8731 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        396.969693  86.616258   4.583 6.18e-06 ***
currentDF[, TRAIT]   0.087714   0.048336   1.815  0.07034 .  
Age                  0.001742   0.005496   0.317  0.75143    
Gendermale           0.300124   0.102533   2.927  0.00362 ** 
ORdate_year         -0.198485   0.043245  -4.590 6.00e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9358 on 389 degrees of freedom
Multiple R-squared:  0.07865,   Adjusted R-squared:  0.06917 
F-statistic: 8.301 on 4 and 389 DF,  p-value: 1.964e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIP1a_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIP1a_rank 
Effect size...............: 0.087714 
Standard error............: 0.048336 
Odds ratio (effect size)..: 1.092 
Lower 95% CI..............: 0.993 
Upper 95% CI..............: 1.2 
T-value...................: 1.814678 
P-value...................: 0.0703435 
R^2.......................: 0.078646 
Adjusted r^2..............: 0.069172 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing RANTES_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         327.62609             0.09623             0.26629            -0.16381  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.87164 -0.58387 -0.08473  0.52960  2.97018 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        332.983028  89.291714   3.729 0.000218 ***
currentDF[, TRAIT]   0.101528   0.047860   2.121 0.034475 *  
Age                  0.004957   0.005107   0.971 0.332343    
Gendermale           0.262940   0.095951   2.740 0.006398 ** 
ORdate_year         -0.166649   0.044571  -3.739 0.000210 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9144 on 422 degrees of freedom
Multiple R-squared:  0.07764,   Adjusted R-squared:  0.0689 
F-statistic: 8.881 on 4 and 422 DF,  p-value: 6.824e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' RANTES_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: RANTES_rank 
Effect size...............: 0.101528 
Standard error............: 0.04786 
Odds ratio (effect size)..: 1.107 
Lower 95% CI..............: 1.008 
Upper 95% CI..............: 1.216 
T-value...................: 2.121344 
P-value...................: 0.03447519 
R^2.......................: 0.077641 
Adjusted r^2..............: 0.068898 
Sample size of AE DB......: 2423 
Sample size of model......: 427 
Missing data %............: 82.37722 

- processing MIG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   404.8686       0.2736      -0.2024  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9925 -0.5977 -0.1095  0.5154  2.9297 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        427.718328  87.574695   4.884 1.48e-06 ***
currentDF[, TRAIT]   0.036122   0.047591   0.759  0.44828    
Age                  0.003277   0.005258   0.623  0.53344    
Gendermale           0.267777   0.097077   2.758  0.00606 ** 
ORdate_year         -0.213864   0.043728  -4.891 1.43e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.925 on 419 degrees of freedom
Multiple R-squared:  0.06996,   Adjusted R-squared:  0.06108 
F-statistic: 7.879 on 4 and 419 DF,  p-value: 3.944e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIG_rank 
Effect size...............: 0.036122 
Standard error............: 0.047591 
Odds ratio (effect size)..: 1.037 
Lower 95% CI..............: 0.944 
Upper 95% CI..............: 1.138 
T-value...................: 0.758996 
P-value...................: 0.4482814 
R^2.......................: 0.069959 
Adjusted r^2..............: 0.06108 
Sample size of AE DB......: 2423 
Sample size of model......: 424 
Missing data %............: 82.50103 

- processing IP10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          400.3374              0.1025              0.2924             -0.2001  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.94733 -0.58274 -0.09808  0.53081  2.89664 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        407.032341  86.721660   4.694 3.74e-06 ***
currentDF[, TRAIT]   0.106331   0.047303   2.248  0.02515 *  
Age                  0.004060   0.005486   0.740  0.45972    
Gendermale           0.289105   0.100577   2.874  0.00427 ** 
ORdate_year         -0.203589   0.043296  -4.702 3.60e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9225 on 383 degrees of freedom
Multiple R-squared:  0.08553,   Adjusted R-squared:  0.07598 
F-statistic: 8.956 on 4 and 383 DF,  p-value: 6.362e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IP10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IP10_rank 
Effect size...............: 0.106331 
Standard error............: 0.047303 
Odds ratio (effect size)..: 1.112 
Lower 95% CI..............: 1.014 
Upper 95% CI..............: 1.22 
T-value...................: 2.247891 
P-value...................: 0.02515147 
R^2.......................: 0.085535 
Adjusted r^2..............: 0.075984 
Sample size of AE DB......: 2423 
Sample size of model......: 388 
Missing data %............: 83.98679 

- processing Eotaxin1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   402.1448       0.2706      -0.2010  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0014 -0.6096 -0.1007  0.5052  2.9228 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        417.170515  83.883143   4.973 9.53e-07 ***
currentDF[, TRAIT]   0.049261   0.046621   1.057  0.29128    
Age                  0.003995   0.005106   0.783  0.43434    
Gendermale           0.257956   0.095913   2.689  0.00744 ** 
ORdate_year         -0.208627   0.041881  -4.981 9.16e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9212 on 430 degrees of freedom
Multiple R-squared:  0.07028,   Adjusted R-squared:  0.06163 
F-statistic: 8.126 on 4 and 430 DF,  p-value: 2.527e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Eotaxin1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Eotaxin1_rank 
Effect size...............: 0.049261 
Standard error............: 0.046621 
Odds ratio (effect size)..: 1.05 
Lower 95% CI..............: 0.959 
Upper 95% CI..............: 1.151 
T-value...................: 1.056626 
P-value...................: 0.2912753 
R^2.......................: 0.070282 
Adjusted r^2..............: 0.061633 
Sample size of AE DB......: 2423 
Sample size of model......: 435 
Missing data %............: 82.04705 

- processing TARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          259.7313              0.1304              0.2372             -0.1299  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9737 -0.6141 -0.1072  0.5032  2.6997 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)   
(Intercept)        266.159979 102.621677   2.594  0.00988 **
currentDF[, TRAIT]   0.133654   0.051245   2.608  0.00947 **
Age                  0.003268   0.005404   0.605  0.54568   
Gendermale           0.235606   0.102344   2.302  0.02189 * 
ORdate_year         -0.133251   0.051227  -2.601  0.00966 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9182 on 368 degrees of freedom
Multiple R-squared:  0.05708,   Adjusted R-squared:  0.04683 
F-statistic: 5.569 on 4 and 368 DF,  p-value: 0.0002314

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TARC_rank 
Effect size...............: 0.133654 
Standard error............: 0.051245 
Odds ratio (effect size)..: 1.143 
Lower 95% CI..............: 1.034 
Upper 95% CI..............: 1.264 
T-value...................: 2.608132 
P-value...................: 0.009474563 
R^2.......................: 0.057077 
Adjusted r^2..............: 0.046827 
Sample size of AE DB......: 2423 
Sample size of model......: 373 
Missing data %............: 84.60586 

- processing PARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          327.4082              0.1384              0.2771             -0.1637  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9070 -0.6184 -0.0725  0.5392  3.0240 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        333.667657  86.443553   3.860 0.000131 ***
currentDF[, TRAIT]   0.139435   0.046946   2.970 0.003144 ** 
Age                  0.003913   0.005040   0.776 0.437991    
Gendermale           0.275525   0.094515   2.915 0.003741 ** 
ORdate_year         -0.166963   0.043154  -3.869 0.000126 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.913 on 430 degrees of freedom
Multiple R-squared:  0.08661,   Adjusted R-squared:  0.07811 
F-statistic: 10.19 on 4 and 430 DF,  p-value: 6.827e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' PARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: PARC_rank 
Effect size...............: 0.139435 
Standard error............: 0.046946 
Odds ratio (effect size)..: 1.15 
Lower 95% CI..............: 1.049 
Upper 95% CI..............: 1.26 
T-value...................: 2.970091 
P-value...................: 0.003143855 
R^2.......................: 0.086606 
Adjusted r^2..............: 0.078109 
Sample size of AE DB......: 2423 
Sample size of model......: 435 
Missing data %............: 82.04705 

- processing MDC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   408.0877       0.3213      -0.2040  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.99814 -0.59702 -0.08428  0.55183  2.92191 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        374.573357  92.251811   4.060 5.94e-05 ***
currentDF[, TRAIT]   0.057757   0.050953   1.134  0.25769    
Age                  0.001495   0.005455   0.274  0.78413    
Gendermale           0.323557   0.102239   3.165  0.00168 ** 
ORdate_year         -0.187304   0.046050  -4.067 5.77e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9354 on 386 degrees of freedom
Multiple R-squared:  0.07845,   Adjusted R-squared:  0.0689 
F-statistic: 8.215 on 4 and 386 DF,  p-value: 2.29e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MDC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MDC_rank 
Effect size...............: 0.057757 
Standard error............: 0.050953 
Odds ratio (effect size)..: 1.059 
Lower 95% CI..............: 0.959 
Upper 95% CI..............: 1.171 
T-value...................: 1.133543 
P-value...................: 0.2576896 
R^2.......................: 0.078453 
Adjusted r^2..............: 0.068903 
Sample size of AE DB......: 2423 
Sample size of model......: 391 
Missing data %............: 83.86298 

- processing OPG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          406.1916              0.1514              0.2463             -0.2030  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7926 -0.6021 -0.1021  0.5371  2.8144 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        414.852239  82.585723   5.023 7.47e-07 ***
currentDF[, TRAIT]   0.154488   0.043687   3.536  0.00045 ***
Age                  0.004756   0.005058   0.940  0.34758    
Gendermale           0.243240   0.094761   2.567  0.01060 *  
ORdate_year         -0.207492   0.041233  -5.032 7.14e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9102 on 429 degrees of freedom
Multiple R-squared:  0.09423,   Adjusted R-squared:  0.08578 
F-statistic: 11.16 on 4 and 429 DF,  p-value: 1.28e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' OPG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: OPG_rank 
Effect size...............: 0.154488 
Standard error............: 0.043687 
Odds ratio (effect size)..: 1.167 
Lower 95% CI..............: 1.071 
Upper 95% CI..............: 1.271 
T-value...................: 3.536236 
P-value...................: 0.0004500912 
R^2.......................: 0.094227 
Adjusted r^2..............: 0.085781 
Sample size of AE DB......: 2423 
Sample size of model......: 434 
Missing data %............: 82.08832 

- processing sICAM1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          348.5754              0.1199              0.2743             -0.1743  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.94630 -0.60443 -0.07322  0.52075  2.92462 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        355.162519  84.910547   4.183 3.49e-05 ***
currentDF[, TRAIT]   0.126150   0.044725   2.821  0.00502 ** 
Age                  0.005385   0.005088   1.058  0.29046    
Gendermale           0.272232   0.094590   2.878  0.00420 ** 
ORdate_year         -0.177736   0.042386  -4.193 3.34e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9139 on 430 degrees of freedom
Multiple R-squared:  0.0848,    Adjusted R-squared:  0.07629 
F-statistic: 9.961 on 4 and 430 DF,  p-value: 1.023e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' sICAM1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: sICAM1_rank 
Effect size...............: 0.12615 
Standard error............: 0.044725 
Odds ratio (effect size)..: 1.134 
Lower 95% CI..............: 1.039 
Upper 95% CI..............: 1.238 
T-value...................: 2.820549 
P-value...................: 0.00501602 
R^2.......................: 0.0848 
Adjusted r^2..............: 0.076287 
Sample size of AE DB......: 2423 
Sample size of model......: 435 
Missing data %............: 82.04705 

- processing VEGFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          625.1068              0.2088              0.2828             -0.3123  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8013 -0.5778 -0.1391  0.4550  2.8829 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        637.536834  95.001315   6.711 7.46e-11 ***
currentDF[, TRAIT]   0.207733   0.047826   4.343 1.82e-05 ***
Age                  0.004984   0.005203   0.958  0.33876    
Gendermale           0.283464   0.099381   2.852  0.00459 ** 
ORdate_year         -0.318649   0.047432  -6.718 7.14e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8676 on 363 degrees of freedom
Multiple R-squared:  0.1388,    Adjusted R-squared:  0.1293 
F-statistic: 14.62 on 4 and 363 DF,  p-value: 4.399e-11

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' VEGFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: VEGFA_rank 
Effect size...............: 0.207733 
Standard error............: 0.047826 
Odds ratio (effect size)..: 1.231 
Lower 95% CI..............: 1.121 
Upper 95% CI..............: 1.352 
T-value...................: 4.343473 
P-value...................: 1.822187e-05 
R^2.......................: 0.138758 
Adjusted r^2..............: 0.129267 
Sample size of AE DB......: 2423 
Sample size of model......: 368 
Missing data %............: 84.81222 

- processing TGFB_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   433.2702       0.2619      -0.2165  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9163 -0.6071 -0.1017  0.5428  2.9677 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        420.271319  86.614707   4.852 1.72e-06 ***
currentDF[, TRAIT]   0.048956   0.046165   1.060  0.28954    
Age                  0.003353   0.005156   0.650  0.51589    
Gendermale           0.264868   0.097695   2.711  0.00698 ** 
ORdate_year         -0.210145   0.043243  -4.860 1.66e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9269 on 420 degrees of freedom
Multiple R-squared:  0.07633,   Adjusted R-squared:  0.06754 
F-statistic: 8.677 on 4 and 420 DF,  p-value: 9.758e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TGFB_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TGFB_rank 
Effect size...............: 0.048956 
Standard error............: 0.046165 
Odds ratio (effect size)..: 1.05 
Lower 95% CI..............: 0.959 
Upper 95% CI..............: 1.15 
T-value...................: 1.060461 
P-value...................: 0.2895444 
R^2.......................: 0.076334 
Adjusted r^2..............: 0.067537 
Sample size of AE DB......: 2423 
Sample size of model......: 425 
Missing data %............: 82.45976 

- processing MMP2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   563.6482       0.3221      -0.2816  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9560 -0.5839 -0.0973  0.5118  3.1719 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        559.51950   88.02210   6.357 5.33e-10 ***
currentDF[, TRAIT]   0.03617    0.04616   0.784 0.433740    
Age                  0.00240    0.00506   0.474 0.635456    
Gendermale           0.33046    0.09564   3.455 0.000605 ***
ORdate_year         -0.27966    0.04394  -6.364 5.09e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9122 on 425 degrees of freedom
Multiple R-squared:  0.1113,    Adjusted R-squared:  0.1029 
F-statistic: 13.31 on 4 and 425 DF,  p-value: 3.182e-10

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP2_rank 
Effect size...............: 0.036166 
Standard error............: 0.046157 
Odds ratio (effect size)..: 1.037 
Lower 95% CI..............: 0.947 
Upper 95% CI..............: 1.135 
T-value...................: 0.78355 
P-value...................: 0.4337405 
R^2.......................: 0.111296 
Adjusted r^2..............: 0.102932 
Sample size of AE DB......: 2423 
Sample size of model......: 430 
Missing data %............: 82.25341 

- processing MMP8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          563.2526              0.1837              0.2579             -0.2814  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.14127 -0.54874 -0.08888  0.49583  3.08371 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        566.655197  85.910098   6.596 1.26e-10 ***
currentDF[, TRAIT]   0.183850   0.044968   4.089 5.19e-05 ***
Age                  0.002163   0.004947   0.437  0.66212    
Gendermale           0.257646   0.094569   2.724  0.00671 ** 
ORdate_year         -0.283185   0.042890  -6.603 1.21e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8954 on 425 degrees of freedom
Multiple R-squared:  0.1437,    Adjusted R-squared:  0.1356 
F-statistic: 17.83 on 4 and 425 DF,  p-value: 1.523e-13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP8_rank 
Effect size...............: 0.18385 
Standard error............: 0.044968 
Odds ratio (effect size)..: 1.202 
Lower 95% CI..............: 1.1 
Upper 95% CI..............: 1.313 
T-value...................: 4.088516 
P-value...................: 5.192815e-05 
R^2.......................: 0.143692 
Adjusted r^2..............: 0.135633 
Sample size of AE DB......: 2423 
Sample size of model......: 430 
Missing data %............: 82.25341 

- processing MMP9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          536.0842              0.1141              0.3002             -0.2679  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0536 -0.5754 -0.1183  0.5094  3.0413 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        538.771644  87.598569   6.150 1.78e-09 ***
currentDF[, TRAIT]   0.113628   0.044259   2.567  0.01059 *  
Age                  0.001637   0.005008   0.327  0.74392    
Gendermale           0.300070   0.094724   3.168  0.00165 ** 
ORdate_year         -0.269268   0.043733  -6.157 1.72e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9058 on 425 degrees of freedom
Multiple R-squared:  0.1236,    Adjusted R-squared:  0.1154 
F-statistic: 14.99 on 4 and 425 DF,  p-value: 1.817e-11

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP9_rank 
Effect size...............: 0.113628 
Standard error............: 0.044259 
Odds ratio (effect size)..: 1.12 
Lower 95% CI..............: 1.027 
Upper 95% CI..............: 1.222 
T-value...................: 2.567334 
P-value...................: 0.01058951 
R^2.......................: 0.123604 
Adjusted r^2..............: 0.115355 
Sample size of AE DB......: 2423 
Sample size of model......: 430 
Missing data %............: 82.25341 

Analysis of MCP1_rank.

- processing IL2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   317.7837       0.2414      -0.1587  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3756 -0.6561 -0.0206  0.6542  2.6675 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)   
(Intercept)        331.200461 103.072538   3.213  0.00142 **
currentDF[, TRAIT]  -0.067438   0.048698  -1.385  0.16687   
Age                 -0.005142   0.005524  -0.931  0.35245   
Gendermale           0.234123   0.107979   2.168  0.03073 * 
ORdate_year         -0.165194   0.051462  -3.210  0.00143 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9691 on 403 degrees of freedom
Multiple R-squared:  0.03965,   Adjusted R-squared:  0.03011 
F-statistic: 4.159 on 4 and 403 DF,  p-value: 0.002591

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL2_rank 
Effect size...............: -0.067438 
Standard error............: 0.048698 
Odds ratio (effect size)..: 0.935 
Lower 95% CI..............: 0.85 
Upper 95% CI..............: 1.028 
T-value...................: -1.384828 
P-value...................: 0.1668713 
R^2.......................: 0.039647 
Adjusted r^2..............: 0.030115 
Sample size of AE DB......: 2423 
Sample size of model......: 408 
Missing data %............: 83.16137 

- processing IL4_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
    396.488        0.302       -0.198  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3451 -0.6586 -0.0216  0.6565  2.7193 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        395.419104 111.526359   3.546 0.000442 ***
currentDF[, TRAIT]  -0.039830   0.050847  -0.783 0.433930    
Age                 -0.006173   0.005785  -1.067 0.286646    
Gendermale           0.299567   0.113355   2.643 0.008571 ** 
ORdate_year         -0.197249   0.055683  -3.542 0.000447 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9702 on 373 degrees of freedom
Multiple R-squared:  0.05331,   Adjusted R-squared:  0.04316 
F-statistic: 5.251 on 4 and 373 DF,  p-value: 0.0003999

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL4_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL4_rank 
Effect size...............: -0.03983 
Standard error............: 0.050847 
Odds ratio (effect size)..: 0.961 
Lower 95% CI..............: 0.87 
Upper 95% CI..............: 1.062 
T-value...................: -0.783331 
P-value...................: 0.43393 
R^2.......................: 0.053309 
Adjusted r^2..............: 0.043157 
Sample size of AE DB......: 2423 
Sample size of model......: 378 
Missing data %............: 84.39951 

- processing IL5_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         384.48883            -0.07448             0.28809            -0.19198  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4804 -0.6335 -0.0382  0.6628  2.6508 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        369.073757 107.080598   3.447 0.000628 ***
currentDF[, TRAIT]  -0.075767   0.048993  -1.546 0.122783    
Age                 -0.007120   0.005603  -1.271 0.204576    
Gendermale           0.299056   0.108116   2.766 0.005939 ** 
ORdate_year         -0.184049   0.053468  -3.442 0.000638 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9656 on 396 degrees of freedom
Multiple R-squared:  0.05401,   Adjusted R-squared:  0.04446 
F-statistic: 5.653 on 4 and 396 DF,  p-value: 0.0001964

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL5_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL5_rank 
Effect size...............: -0.075767 
Standard error............: 0.048993 
Odds ratio (effect size)..: 0.927 
Lower 95% CI..............: 0.842 
Upper 95% CI..............: 1.02 
T-value...................: -1.546497 
P-value...................: 0.1227834 
R^2.......................: 0.054014 
Adjusted r^2..............: 0.044458 
Sample size of AE DB......: 2423 
Sample size of model......: 401 
Missing data %............: 83.45027 

- processing IL6_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         304.00325             0.06981             0.22677            -0.15178  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.15866 -0.65200 -0.00741  0.66318  2.69318 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)   
(Intercept)        295.809907  97.929224   3.021  0.00268 **
currentDF[, TRAIT]   0.069665   0.047370   1.471  0.14213   
Age                 -0.005063   0.005497  -0.921  0.35752   
Gendermale           0.230037   0.106708   2.156  0.03167 * 
ORdate_year         -0.147522   0.048896  -3.017  0.00271 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9719 on 420 degrees of freedom
Multiple R-squared:  0.03519,   Adjusted R-squared:  0.026 
F-statistic:  3.83 on 4 and 420 DF,  p-value: 0.004536

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL6_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL6_rank 
Effect size...............: 0.069665 
Standard error............: 0.04737 
Odds ratio (effect size)..: 1.072 
Lower 95% CI..............: 0.977 
Upper 95% CI..............: 1.176 
T-value...................: 1.470669 
P-value...................: 0.1421293 
R^2.......................: 0.035189 
Adjusted r^2..............: 0.026 
Sample size of AE DB......: 2423 
Sample size of model......: 425 
Missing data %............: 82.45976 

- processing IL8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
         455.41647             0.31925            -0.01045             0.22219            -0.22697  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.15896 -0.54787 -0.05189  0.56747  2.83787 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        455.416470  91.719536   4.965 1.01e-06 ***
currentDF[, TRAIT]   0.319248   0.047186   6.766 4.63e-11 ***
Age                 -0.010455   0.005209  -2.007   0.0454 *  
Gendermale           0.222191   0.102155   2.175   0.0302 *  
ORdate_year         -0.226974   0.045788  -4.957 1.05e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9134 on 407 degrees of freedom
Multiple R-squared:  0.1467,    Adjusted R-squared:  0.1383 
F-statistic: 17.49 on 4 and 407 DF,  p-value: 2.941e-13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL8_rank 
Effect size...............: 0.319248 
Standard error............: 0.047186 
Odds ratio (effect size)..: 1.376 
Lower 95% CI..............: 1.255 
Upper 95% CI..............: 1.509 
T-value...................: 6.765783 
P-value...................: 4.631788e-11 
R^2.......................: 0.146701 
Adjusted r^2..............: 0.138315 
Sample size of AE DB......: 2423 
Sample size of model......: 412 
Missing data %............: 82.99629 

- processing IL9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          449.5529              0.2728              0.2753             -0.2244  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.01604 -0.62630 -0.08902  0.62907  2.66902 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        445.416806  71.222529   6.254 8.66e-10 ***
currentDF[, TRAIT]   0.269238   0.040045   6.723 4.91e-11 ***
Age                 -0.004330   0.004633  -0.935  0.35047    
Gendermale           0.277452   0.088478   3.136  0.00182 ** 
ORdate_year         -0.222210   0.035552  -6.250 8.85e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8896 on 495 degrees of freedom
Multiple R-squared:  0.1682,    Adjusted R-squared:  0.1614 
F-statistic: 25.02 on 4 and 495 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL9_rank 
Effect size...............: 0.269238 
Standard error............: 0.040045 
Odds ratio (effect size)..: 1.309 
Lower 95% CI..............: 1.21 
Upper 95% CI..............: 1.416 
T-value...................: 6.723338 
P-value...................: 4.907886e-11 
R^2.......................: 0.168152 
Adjusted r^2..............: 0.16143 
Sample size of AE DB......: 2423 
Sample size of model......: 500 
Missing data %............: 79.36442 

- processing IL10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          406.1557             -0.1134              0.2844             -0.2028  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4859 -0.6531 -0.0240  0.7019  2.6509 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        398.869702 119.403549   3.341 0.000926 ***
currentDF[, TRAIT]  -0.117134   0.053607  -2.185 0.029543 *  
Age                 -0.007922   0.005967  -1.328 0.185151    
Gendermale           0.298223   0.116386   2.562 0.010810 *  
ORdate_year         -0.198902   0.059610  -3.337 0.000938 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9788 on 353 degrees of freedom
Multiple R-squared:  0.05845,   Adjusted R-squared:  0.04778 
F-statistic: 5.478 on 4 and 353 DF,  p-value: 0.0002735

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL10_rank 
Effect size...............: -0.117134 
Standard error............: 0.053607 
Odds ratio (effect size)..: 0.889 
Lower 95% CI..............: 0.801 
Upper 95% CI..............: 0.988 
T-value...................: -2.185044 
P-value...................: 0.02954261 
R^2.......................: 0.058451 
Adjusted r^2..............: 0.047781 
Sample size of AE DB......: 2423 
Sample size of model......: 358 
Missing data %............: 85.22493 

- processing IL12_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         393.10801            -0.09786             0.30519            -0.19629  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5214 -0.6373 -0.0335  0.6609  2.6820 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        385.201779 111.303850   3.461 0.000601 ***
currentDF[, TRAIT]  -0.099846   0.050664  -1.971 0.049487 *  
Age                 -0.005609   0.005764  -0.973 0.331137    
Gendermale           0.316927   0.111700   2.837 0.004797 ** 
ORdate_year         -0.192164   0.055571  -3.458 0.000607 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.966 on 374 degrees of freedom
Multiple R-squared:  0.05558,   Adjusted R-squared:  0.04548 
F-statistic: 5.503 on 4 and 374 DF,  p-value: 0.0002583

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL12_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL12_rank 
Effect size...............: -0.099846 
Standard error............: 0.050664 
Odds ratio (effect size)..: 0.905 
Lower 95% CI..............: 0.819 
Upper 95% CI..............: 0.999 
T-value...................: -1.970771 
P-value...................: 0.04948712 
R^2.......................: 0.055585 
Adjusted r^2..............: 0.045484 
Sample size of AE DB......: 2423 
Sample size of model......: 379 
Missing data %............: 84.35823 

- processing IL13_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          464.1716              0.4014              0.2097             -0.2317  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.6625 -0.6651 -0.0686  0.5793  2.4990 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        462.277252  69.049724   6.695 5.34e-11 ***
currentDF[, TRAIT]   0.400238   0.037890  10.563  < 2e-16 ***
Age                 -0.001378   0.004368  -0.315   0.7525    
Gendermale           0.210670   0.083341   2.528   0.0118 *  
ORdate_year         -0.230718   0.034471  -6.693 5.40e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8808 on 550 degrees of freedom
Multiple R-squared:  0.2245,    Adjusted R-squared:  0.2189 
F-statistic: 39.81 on 4 and 550 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL13_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL13_rank 
Effect size...............: 0.400238 
Standard error............: 0.03789 
Odds ratio (effect size)..: 1.492 
Lower 95% CI..............: 1.385 
Upper 95% CI..............: 1.607 
T-value...................: 10.56311 
P-value...................: 7.144811e-24 
R^2.......................: 0.224521 
Adjusted r^2..............: 0.218881 
Sample size of AE DB......: 2423 
Sample size of model......: 555 
Missing data %............: 77.09451 

- processing IL21_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          436.2035              0.3523              0.2078             -0.2178  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5943 -0.6710 -0.0755  0.6157  2.3777 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        432.376101  70.746565   6.112 1.87e-09 ***
currentDF[, TRAIT]   0.350079   0.038816   9.019  < 2e-16 ***
Age                 -0.002970   0.004468  -0.665   0.5065    
Gendermale           0.209696   0.085522   2.452   0.0145 *  
ORdate_year         -0.215744   0.035317  -6.109 1.90e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9045 on 551 degrees of freedom
Multiple R-squared:  0.1873,    Adjusted R-squared:  0.1814 
F-statistic: 31.76 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL21_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL21_rank 
Effect size...............: 0.350079 
Standard error............: 0.038816 
Odds ratio (effect size)..: 1.419 
Lower 95% CI..............: 1.315 
Upper 95% CI..............: 1.531 
T-value...................: 9.018962 
P-value...................: 3.135903e-18 
R^2.......................: 0.187347 
Adjusted r^2..............: 0.181448 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing INFG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   435.5907       0.3678      -0.2175  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4331 -0.6404 -0.0233  0.6720  2.7166 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        471.147317 106.339563   4.431 1.21e-05 ***
currentDF[, TRAIT]  -0.062392   0.051283  -1.217 0.224459    
Age                 -0.004974   0.005589  -0.890 0.374066    
Gendermale           0.360477   0.108341   3.327 0.000958 ***
ORdate_year         -0.235101   0.053086  -4.429 1.23e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9702 on 400 degrees of freedom
Multiple R-squared:  0.07276,   Adjusted R-squared:  0.06349 
F-statistic: 7.848 on 4 and 400 DF,  p-value: 4.264e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' INFG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: INFG_rank 
Effect size...............: -0.062392 
Standard error............: 0.051283 
Odds ratio (effect size)..: 0.94 
Lower 95% CI..............: 0.85 
Upper 95% CI..............: 1.039 
T-value...................: -1.216638 
P-value...................: 0.2244592 
R^2.......................: 0.072765 
Adjusted r^2..............: 0.063493 
Sample size of AE DB......: 2423 
Sample size of model......: 405 
Missing data %............: 83.28518 

- processing TNFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   321.0628       0.2653      -0.1603  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2762 -0.6483  0.0060  0.6411  2.8309 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)   
(Intercept)        308.664496 112.145327   2.752  0.00621 **
currentDF[, TRAIT]   0.009713   0.050789   0.191  0.84844   
Age                 -0.006370   0.005821  -1.094  0.27459   
Gendermale           0.277185   0.112881   2.456  0.01453 * 
ORdate_year         -0.153941   0.055991  -2.749  0.00627 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9721 on 365 degrees of freedom
Multiple R-squared:  0.03932,   Adjusted R-squared:  0.02879 
F-statistic: 3.734 on 4 and 365 DF,  p-value: 0.005412

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TNFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TNFA_rank 
Effect size...............: 0.009713 
Standard error............: 0.050789 
Odds ratio (effect size)..: 1.01 
Lower 95% CI..............: 0.914 
Upper 95% CI..............: 1.115 
T-value...................: 0.191241 
P-value...................: 0.8484435 
R^2.......................: 0.039317 
Adjusted r^2..............: 0.028789 
Sample size of AE DB......: 2423 
Sample size of model......: 370 
Missing data %............: 84.72967 

- processing MIF_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         136.44181             0.34462             0.23501            -0.06817  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3632 -0.6092 -0.0177  0.6642  2.6913 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        133.066491  79.750174   1.669  0.09578 .  
currentDF[, TRAIT]   0.342095   0.043437   7.876 1.81e-14 ***
Age                 -0.004360   0.004529  -0.963  0.33605    
Gendermale           0.237429   0.086694   2.739  0.00637 ** 
ORdate_year         -0.066341   0.039805  -1.667  0.09615 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9186 on 551 degrees of freedom
Multiple R-squared:  0.1617,    Adjusted R-squared:  0.1557 
F-statistic: 26.58 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIF_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIF_rank 
Effect size...............: 0.342095 
Standard error............: 0.043437 
Odds ratio (effect size)..: 1.408 
Lower 95% CI..............: 1.293 
Upper 95% CI..............: 1.533 
T-value...................: 7.875623 
P-value...................: 1.814862e-14 
R^2.......................: 0.161741 
Adjusted r^2..............: 0.155655 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing MCP1_rank
attempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsense

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT], data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]  
         1.307e-34           1.000e+00  
essentially perfect fit: summary may be unreliable

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
       Min         1Q     Median         3Q        Max 
-2.135e-16 -2.660e-17 -4.490e-18  1.675e-17  3.141e-15 

Coefficients:
                     Estimate Std. Error    t value Pr(>|t|)    
(Intercept)         7.958e-15  1.141e-14  6.970e-01    0.486    
currentDF[, TRAIT]  1.000e+00  6.259e-18  1.598e+17   <2e-16 ***
Age                 8.099e-19  7.018e-19  1.154e+00    0.249    
Gendermale          5.908e-18  1.353e-17  4.370e-01    0.662    
ORdate_year        -4.000e-18  5.698e-18 -7.020e-01    0.483    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.424e-16 on 551 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 6.842e+33 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MCP1_rank ' .
essentially perfect fit: summary may be unreliable
Collecting data.
essentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliable
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MCP1_rank 
Effect size...............: 1 
Standard error............: 0 
Odds ratio (effect size)..: 2.718 
Lower 95% CI..............: 2.718 
Upper 95% CI..............: 2.718 
T-value...................: 1.59758e+17 
P-value...................: 0 
R^2.......................: 1 
Adjusted r^2..............: 1 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing MIP1a_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          474.0856              0.3358              0.2006             -0.2366  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.79686 -0.65092 -0.06877  0.58497  2.67954 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        468.332834  69.013614   6.786 3.22e-11 ***
currentDF[, TRAIT]   0.332995   0.038566   8.635  < 2e-16 ***
Age                 -0.005195   0.004459  -1.165   0.2446    
Gendermale           0.204041   0.085614   2.383   0.0175 *  
ORdate_year         -0.233591   0.034451  -6.780 3.34e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8684 on 508 degrees of freedom
Multiple R-squared:  0.2051,    Adjusted R-squared:  0.1988 
F-statistic: 32.77 on 4 and 508 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIP1a_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIP1a_rank 
Effect size...............: 0.332995 
Standard error............: 0.038566 
Odds ratio (effect size)..: 1.395 
Lower 95% CI..............: 1.294 
Upper 95% CI..............: 1.505 
T-value...................: 8.634514 
P-value...................: 7.646036e-17 
R^2.......................: 0.205089 
Adjusted r^2..............: 0.19883 
Sample size of AE DB......: 2423 
Sample size of model......: 513 
Missing data %............: 78.8279 

- processing RANTES_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          202.9668              0.3373              0.2082             -0.1014  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2792 -0.5356 -0.0162  0.5823  3.0478 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        202.399940  76.702752   2.639  0.00856 ** 
currentDF[, TRAIT]   0.336096   0.042438   7.920 1.35e-14 ***
Age                 -0.001053   0.004542  -0.232  0.81680    
Gendermale           0.208992   0.086714   2.410  0.01628 *  
ORdate_year         -0.101037   0.038283  -2.639  0.00855 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.912 on 544 degrees of freedom
Multiple R-squared:  0.1653,    Adjusted R-squared:  0.1591 
F-statistic: 26.93 on 4 and 544 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' RANTES_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: RANTES_rank 
Effect size...............: 0.336096 
Standard error............: 0.042438 
Odds ratio (effect size)..: 1.399 
Lower 95% CI..............: 1.288 
Upper 95% CI..............: 1.521 
T-value...................: 7.919657 
P-value...................: 1.348892e-14 
R^2.......................: 0.165283 
Adjusted r^2..............: 0.159146 
Sample size of AE DB......: 2423 
Sample size of model......: 549 
Missing data %............: 77.34214 

- processing MIG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          570.9520              0.2940              0.2282             -0.2850  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2468 -0.6400 -0.0431  0.6164  2.4929 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        564.938294  74.957612   7.537 2.04e-13 ***
currentDF[, TRAIT]   0.290517   0.041532   6.995 7.86e-12 ***
Age                 -0.003719   0.004609  -0.807  0.42009    
Gendermale           0.230474   0.087474   2.635  0.00866 ** 
ORdate_year         -0.281872   0.037422  -7.532 2.10e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9197 on 541 degrees of freedom
Multiple R-squared:  0.1494,    Adjusted R-squared:  0.1432 
F-statistic: 23.76 on 4 and 541 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIG_rank 
Effect size...............: 0.290517 
Standard error............: 0.041532 
Odds ratio (effect size)..: 1.337 
Lower 95% CI..............: 1.233 
Upper 95% CI..............: 1.451 
T-value...................: 6.995086 
P-value...................: 7.859583e-12 
R^2.......................: 0.149445 
Adjusted r^2..............: 0.143156 
Sample size of AE DB......: 2423 
Sample size of model......: 546 
Missing data %............: 77.46595 

- processing IP10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          410.1428              0.4186              0.2370             -0.2047  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2812 -0.6240 -0.0607  0.5845  2.3274 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        408.108584  69.680872   5.857 8.64e-09 ***
currentDF[, TRAIT]   0.417366   0.038927  10.722  < 2e-16 ***
Age                 -0.002132   0.004490  -0.475  0.63514    
Gendermale           0.238554   0.084533   2.822  0.00497 ** 
ORdate_year         -0.203660   0.034782  -5.855 8.71e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8559 on 492 degrees of freedom
Multiple R-squared:  0.2476,    Adjusted R-squared:  0.2415 
F-statistic: 40.48 on 4 and 492 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IP10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IP10_rank 
Effect size...............: 0.417366 
Standard error............: 0.038927 
Odds ratio (effect size)..: 1.518 
Lower 95% CI..............: 1.406 
Upper 95% CI..............: 1.638 
T-value...................: 10.72171 
P-value...................: 3.021844e-24 
R^2.......................: 0.247632 
Adjusted r^2..............: 0.241515 
Sample size of AE DB......: 2423 
Sample size of model......: 497 
Missing data %............: 79.48824 

- processing Eotaxin1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          480.4459              0.3284              0.1907             -0.2398  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4214 -0.6698 -0.0780  0.6000  2.5515 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        474.710009  71.895573   6.603 9.51e-11 ***
currentDF[, TRAIT]   0.326133   0.039426   8.272 9.95e-16 ***
Age                 -0.004255   0.004505  -0.944    0.345    
Gendermale           0.193342   0.086639   2.232    0.026 *  
ORdate_year         -0.236820   0.035891  -6.598 9.78e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9139 on 551 degrees of freedom
Multiple R-squared:  0.1704,    Adjusted R-squared:  0.1644 
F-statistic: 28.29 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Eotaxin1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Eotaxin1_rank 
Effect size...............: 0.326133 
Standard error............: 0.039426 
Odds ratio (effect size)..: 1.386 
Lower 95% CI..............: 1.283 
Upper 95% CI..............: 1.497 
T-value...................: 8.272003 
P-value...................: 9.945147e-16 
R^2.......................: 0.170403 
Adjusted r^2..............: 0.16438 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing TARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          244.2877              0.2704              0.1328             -0.1220  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.95046 -0.61035 -0.07473  0.62130  2.69438 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        240.766099  89.076405   2.703  0.00712 ** 
currentDF[, TRAIT]   0.267944   0.044061   6.081 2.45e-09 ***
Age                 -0.002735   0.004820  -0.567  0.57068    
Gendermale           0.133451   0.093203   1.432  0.15285    
ORdate_year         -0.120119   0.044459  -2.702  0.00714 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.922 on 476 degrees of freedom
Multiple R-squared:  0.1124,    Adjusted R-squared:  0.1049 
F-statistic: 15.07 on 4 and 476 DF,  p-value: 1.324e-11

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TARC_rank 
Effect size...............: 0.267944 
Standard error............: 0.044061 
Odds ratio (effect size)..: 1.307 
Lower 95% CI..............: 1.199 
Upper 95% CI..............: 1.425 
T-value...................: 6.08117 
P-value...................: 2.451314e-09 
R^2.......................: 0.112375 
Adjusted r^2..............: 0.104915 
Sample size of AE DB......: 2423 
Sample size of model......: 481 
Missing data %............: 80.14858 

- processing PARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
        162.585286            0.425915           -0.006632            0.277017           -0.081011  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.11016 -0.55126 -0.02245  0.58456  2.17519 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        162.585286  72.281906   2.249 0.024886 *  
currentDF[, TRAIT]   0.425915   0.039168  10.874  < 2e-16 ***
Age                 -0.006632   0.004326  -1.533 0.125889    
Gendermale           0.277017   0.082886   3.342 0.000888 ***
ORdate_year         -0.081011   0.036082  -2.245 0.025152 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8792 on 551 degrees of freedom
Multiple R-squared:  0.2322,    Adjusted R-squared:  0.2266 
F-statistic: 41.65 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' PARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: PARC_rank 
Effect size...............: 0.425915 
Standard error............: 0.039168 
Odds ratio (effect size)..: 1.531 
Lower 95% CI..............: 1.418 
Upper 95% CI..............: 1.653 
T-value...................: 10.87395 
P-value...................: 4.394713e-25 
R^2.......................: 0.232156 
Adjusted r^2..............: 0.226582 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing MDC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          253.6058              0.3792              0.2858             -0.1266  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9082 -0.6351 -0.0943  0.5437  3.2873 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        250.003830  72.176641   3.464 0.000578 ***
currentDF[, TRAIT]   0.377012   0.040358   9.342  < 2e-16 ***
Age                 -0.004058   0.004424  -0.917 0.359527    
Gendermale           0.288455   0.084892   3.398 0.000733 ***
ORdate_year         -0.124711   0.036026  -3.462 0.000583 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8631 on 503 degrees of freedom
Multiple R-squared:  0.2225,    Adjusted R-squared:  0.2163 
F-statistic: 35.99 on 4 and 503 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MDC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MDC_rank 
Effect size...............: 0.377012 
Standard error............: 0.040358 
Odds ratio (effect size)..: 1.458 
Lower 95% CI..............: 1.347 
Upper 95% CI..............: 1.578 
T-value...................: 9.341649 
P-value...................: 3.06886e-19 
R^2.......................: 0.222496 
Adjusted r^2..............: 0.216313 
Sample size of AE DB......: 2423 
Sample size of model......: 508 
Missing data %............: 79.03426 

- processing OPG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          440.2481              0.5843              0.1648             -0.2198  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.6155 -0.5348 -0.0631  0.4750  2.5142 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        438.288904  60.992665   7.186 2.18e-12 ***
currentDF[, TRAIT]   0.583484   0.033999  17.162  < 2e-16 ***
Age                 -0.001501   0.003857  -0.389   0.6972    
Gendermale           0.165816   0.073853   2.245   0.0252 *  
ORdate_year         -0.218731   0.030448  -7.184 2.22e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7796 on 550 degrees of freedom
Multiple R-squared:  0.3925,    Adjusted R-squared:  0.3881 
F-statistic: 88.84 on 4 and 550 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' OPG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: OPG_rank 
Effect size...............: 0.583484 
Standard error............: 0.033999 
Odds ratio (effect size)..: 1.792 
Lower 95% CI..............: 1.677 
Upper 95% CI..............: 1.916 
T-value...................: 17.16184 
P-value...................: 3.464325e-53 
R^2.......................: 0.392512 
Adjusted r^2..............: 0.388094 
Sample size of AE DB......: 2423 
Sample size of model......: 555 
Missing data %............: 77.09451 

- processing sICAM1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         100.25480             0.65142             0.23469            -0.05012  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.12956 -0.37673  0.03337  0.42560  2.24890 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        101.612492  59.566339   1.706 0.088596 .  
currentDF[, TRAIT]   0.653254   0.032594  20.042  < 2e-16 ***
Age                  0.001807   0.003650   0.495 0.620785    
Gendermale           0.233698   0.069490   3.363 0.000824 ***
ORdate_year         -0.050855   0.029732  -1.710 0.087739 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7369 on 551 degrees of freedom
Multiple R-squared:  0.4606,    Adjusted R-squared:  0.4567 
F-statistic: 117.6 on 4 and 551 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' sICAM1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: sICAM1_rank 
Effect size...............: 0.653254 
Standard error............: 0.032594 
Odds ratio (effect size)..: 1.922 
Lower 95% CI..............: 1.803 
Upper 95% CI..............: 2.049 
T-value...................: 20.042 
P-value...................: 1.602312e-67 
R^2.......................: 0.460602 
Adjusted r^2..............: 0.456687 
Sample size of AE DB......: 2423 
Sample size of model......: 556 
Missing data %............: 77.05324 

- processing VEGFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          636.0065              0.3152              0.2101             -0.3175  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2726 -0.6299 -0.0513  0.6024  2.7533 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        627.435812  87.528538   7.168 3.16e-12 ***
currentDF[, TRAIT]   0.316635   0.046349   6.832 2.76e-11 ***
Age                 -0.005637   0.004958  -1.137   0.2562    
Gendermale           0.209258   0.096821   2.161   0.0312 *  
ORdate_year         -0.312989   0.043693  -7.163 3.26e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9106 on 447 degrees of freedom
Multiple R-squared:  0.1538,    Adjusted R-squared:  0.1463 
F-statistic: 20.32 on 4 and 447 DF,  p-value: 2.158e-15

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' VEGFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: VEGFA_rank 
Effect size...............: 0.316635 
Standard error............: 0.046349 
Odds ratio (effect size)..: 1.373 
Lower 95% CI..............: 1.253 
Upper 95% CI..............: 1.503 
T-value...................: 6.831545 
P-value...................: 2.757679e-11 
R^2.......................: 0.153843 
Adjusted r^2..............: 0.146271 
Sample size of AE DB......: 2423 
Sample size of model......: 452 
Missing data %............: 81.34544 

- processing TGFB_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          370.4817              0.1160              0.2732             -0.1850  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4713 -0.6428 -0.0446  0.6781  2.6902 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        366.409129  78.009902   4.697 3.38e-06 ***
currentDF[, TRAIT]   0.114467   0.042999   2.662  0.00800 ** 
Age                 -0.003384   0.004812  -0.703  0.48216    
Gendermale           0.274764   0.092739   2.963  0.00319 ** 
ORdate_year         -0.182825   0.038942  -4.695 3.41e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9567 on 523 degrees of freedom
Multiple R-squared:  0.07951,   Adjusted R-squared:  0.07247 
F-statistic: 11.29 on 4 and 523 DF,  p-value: 8.501e-09

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TGFB_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TGFB_rank 
Effect size...............: 0.114467 
Standard error............: 0.042999 
Odds ratio (effect size)..: 1.121 
Lower 95% CI..............: 1.031 
Upper 95% CI..............: 1.22 
T-value...................: 2.662105 
P-value...................: 0.008004355 
R^2.......................: 0.079508 
Adjusted r^2..............: 0.072468 
Sample size of AE DB......: 2423 
Sample size of model......: 528 
Missing data %............: 78.20883 

- processing MMP2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          289.5407              0.3330              0.3622             -0.1446  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4835 -0.5786  0.0060  0.5934  2.6531 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        284.458423  77.752159   3.659 0.000279 ***
currentDF[, TRAIT]   0.330774   0.040358   8.196 1.91e-15 ***
Age                 -0.005165   0.004588  -1.126 0.260745    
Gendermale           0.364122   0.088326   4.122 4.35e-05 ***
ORdate_year         -0.141897   0.038812  -3.656 0.000282 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9102 on 526 degrees of freedom
Multiple R-squared:  0.1664,    Adjusted R-squared:   0.16 
F-statistic: 26.24 on 4 and 526 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP2_rank 
Effect size...............: 0.330774 
Standard error............: 0.040358 
Odds ratio (effect size)..: 1.392 
Lower 95% CI..............: 1.286 
Upper 95% CI..............: 1.507 
T-value...................: 8.196056 
P-value...................: 1.905934e-15 
R^2.......................: 0.166354 
Adjusted r^2..............: 0.160015 
Sample size of AE DB......: 2423 
Sample size of model......: 531 
Missing data %............: 78.08502 

- processing MMP8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
        389.774698            0.432719           -0.007878            0.143507           -0.194289  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2706 -0.4946  0.0294  0.5473  2.8701 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        389.774698  73.252460   5.321 1.53e-07 ***
currentDF[, TRAIT]   0.432719   0.038141  11.345  < 2e-16 ***
Age                 -0.007878   0.004362  -1.806   0.0715 .  
Gendermale           0.143507   0.084864   1.691   0.0914 .  
ORdate_year         -0.194289   0.036567  -5.313 1.59e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8664 on 526 degrees of freedom
Multiple R-squared:  0.2447,    Adjusted R-squared:  0.239 
F-statistic: 42.61 on 4 and 526 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP8_rank 
Effect size...............: 0.432719 
Standard error............: 0.038141 
Odds ratio (effect size)..: 1.541 
Lower 95% CI..............: 1.43 
Upper 95% CI..............: 1.661 
T-value...................: 11.34524 
P-value...................: 7.740327e-27 
R^2.......................: 0.244712 
Adjusted r^2..............: 0.238968 
Sample size of AE DB......: 2423 
Sample size of model......: 531 
Missing data %............: 78.08502 

- processing MMP9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year  
         257.60136             0.56444            -0.01056             0.20596            -0.12826  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1884 -0.5048 -0.0073  0.5197  2.8723 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        257.601363  67.289335   3.828 0.000145 ***
currentDF[, TRAIT]   0.564438   0.035147  16.059  < 2e-16 ***
Age                 -0.010561   0.003989  -2.648 0.008352 ** 
Gendermale           0.205960   0.076739   2.684 0.007507 ** 
ORdate_year         -0.128262   0.033591  -3.818 0.000150 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7912 on 525 degrees of freedom
Multiple R-squared:  0.3698,    Adjusted R-squared:  0.365 
F-statistic: 77.03 on 4 and 525 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP9_rank 
Effect size...............: 0.564438 
Standard error............: 0.035147 
Odds ratio (effect size)..: 1.758 
Lower 95% CI..............: 1.641 
Upper 95% CI..............: 1.884 
T-value...................: 16.05932 
P-value...................: 1.678039e-47 
R^2.......................: 0.369827 
Adjusted r^2..............: 0.365025 
Sample size of AE DB......: 2423 
Sample size of model......: 530 
Missing data %............: 78.12629 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "T-value", "P-value", "r^2", "r^2_adj", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`T-value` <- as.numeric(GLM.results$`T-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2` <- as.numeric(GLM.results$`r^2`)
GLM.results$`r^2_adj` <- as.numeric(GLM.results$`r^2_adj`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)
DT::datatable(GLM.results)


# Save the data
cat("Writing results to Excel-file...\n")
Writing results to Excel-file...
### Univariate
library(openxlsx)
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Con.Uni.MCP1_Plaque.Cytokines_Plaques.RANK.MODEL1.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Con.Uni.PlaquePheno")
# Removing intermediates
cat("Removing intermediate files...\n")
Removing intermediate files...
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

Model 2

In this model we correct for Age, Gender, year of surgery, Hypertension status, Diabetes status, current smoker status, lipid-lowering drugs (LLDs), antiplatelet medication, eGFR (MDRD), BMI, MedHx_CVD (combination of CAD history, stroke history, and peripheral interventions), and stenosis.

Here we use the inverse-rank normalized data - visually this is more normally distributed.

Analysis of plaque cytokines as a function of plaque MCP1 levels.


GLM.results <- data.frame(matrix(NA, ncol = 15, nrow = 0))
cat("Running linear regression...\n")
Running linear regression...
for (protein in 1:length(TRAITS.PROTEIN.RANK)) {
  PROTEIN = TRAITS.PROTEIN.RANK[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  for (trait in 1:length(proteins_of_interest_rank)) {
    TRAIT = proteins_of_interest_rank[trait]
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M2) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.)))
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    ### univariate
    fit <- lm(currentDF[,PROTEIN] ~ currentDF[,TRAIT] + Age + Gender + ORdate_year + 
                Hypertension.composite + DiabetesStatus + SmokerStatus + 
                Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
                MedHx_CVD + stenose, 
              data = currentDF)
    model_step <- stepAIC(fit, direction = "both", trace = FALSE)
    print(model_step)
    print(summary(fit))
    
    GLM.results.TEMP <- data.frame(matrix(NA, ncol = 15, nrow = 0))
    GLM.results.TEMP[1,] = GLM.CON(fit, "AEDB.CEA", PROTEIN, TRAIT, verbose = TRUE)
    GLM.results = rbind(GLM.results, GLM.results.TEMP)
  }
}

Analysis of MCP1_pg_ml_2015_rank.

- processing IL2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Age + Gender + ORdate_year + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
             (Intercept)                       Age                Gendermale               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked  
              392.542541                  0.009152                  0.248164                 -0.196726                 -0.242509                  0.095364  
       Med.Statin.LLDyes   Med.all.antiplateletyes             stenose50-70%             stenose70-90%             stenose90-99%   stenose100% (Occlusion)  
               -0.178209                 -0.310615                  0.561873                  1.110132                  0.934465                 -0.114191  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.86123 -0.57366 -0.03745  0.44256  2.66670 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.030e+02  1.121e+02   3.594 0.000381 ***
currentDF[, TRAIT]        -6.417e-02  5.303e-02  -1.210 0.227275    
Age                        8.901e-03  6.581e-03   1.353 0.177186    
Gendermale                 2.308e-01  1.140e-01   2.026 0.043711 *  
ORdate_year               -2.020e-01  5.595e-02  -3.611 0.000358 ***
Hypertension.compositeyes -9.689e-02  1.563e-01  -0.620 0.535919    
DiabetesStatusDiabetes     6.399e-02  1.311e-01   0.488 0.625777    
SmokerStatusEx-smoker     -2.236e-01  1.163e-01  -1.923 0.055473 .  
SmokerStatusNever smoked   1.378e-01  1.836e-01   0.750 0.453757    
Med.Statin.LLDyes         -2.047e-01  1.163e-01  -1.760 0.079430 .  
Med.all.antiplateletyes   -3.047e-01  1.923e-01  -1.585 0.114035    
GFR_MDRD                   1.495e-03  2.969e-03   0.504 0.614915    
BMI                        2.149e-04  1.562e-02   0.014 0.989033    
MedHx_CVDyes               1.169e-01  1.084e-01   1.078 0.281703    
stenose50-70%              6.412e-01  9.428e-01   0.680 0.496954    
stenose70-90%              1.221e+00  9.000e-01   1.357 0.175799    
stenose90-99%              1.045e+00  8.985e-01   1.163 0.245840    
stenose100% (Occlusion)    9.608e-03  1.061e+00   0.009 0.992780    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8844 on 295 degrees of freedom
Multiple R-squared:  0.1323,    Adjusted R-squared:  0.08225 
F-statistic: 2.645 on 17 and 295 DF,  p-value: 0.0004977

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL2_rank 
Effect size...............: -0.064168 
Standard error............: 0.053034 
Odds ratio (effect size)..: 0.938 
Lower 95% CI..............: 0.845 
Upper 95% CI..............: 1.041 
T-value...................: -1.209928 
P-value...................: 0.227275 
R^2.......................: 0.132252 
Adjusted r^2..............: 0.082247 
Sample size of AE DB......: 2423 
Sample size of model......: 313 
Missing data %............: 87.08213 

- processing IL4_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + SmokerStatus + Med.Statin.LLD, data = currentDF)

Coefficients:
             (Intercept)        currentDF[, TRAIT]                       Age                Gendermale               ORdate_year     SmokerStatusEx-smoker  
              514.570221                 -0.090736                  0.008686                  0.204460                 -0.257261                 -0.230470  
SmokerStatusNever smoked         Med.Statin.LLDyes  
                0.023567                 -0.192415  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.82607 -0.59893 -0.05389  0.47017  2.60324 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               488.844886 120.495720   4.057 6.51e-05 ***
currentDF[, TRAIT]         -0.090320   0.055013  -1.642   0.1018    
Age                         0.007596   0.006748   1.126   0.2613    
Gendermale                  0.198266   0.118568   1.672   0.0956 .  
ORdate_year                -0.244476   0.060152  -4.064 6.32e-05 ***
Hypertension.compositeyes  -0.091807   0.162354  -0.565   0.5722    
DiabetesStatusDiabetes      0.074527   0.133376   0.559   0.5768    
SmokerStatusEx-smoker      -0.224830   0.117208  -1.918   0.0561 .  
SmokerStatusNever smoked    0.088341   0.192119   0.460   0.6460    
Med.Statin.LLDyes          -0.216649   0.120270  -1.801   0.0728 .  
Med.all.antiplateletyes    -0.234374   0.200363  -1.170   0.2431    
GFR_MDRD                    0.000623   0.003205   0.194   0.8460    
BMI                        -0.002501   0.015895  -0.157   0.8751    
MedHx_CVDyes                0.124152   0.111365   1.115   0.2659    
stenose70-90%               0.508215   0.299639   1.696   0.0910 .  
stenose90-99%               0.414293   0.293921   1.410   0.1598    
stenose100% (Occlusion)    -0.569273   0.615725  -0.925   0.3560    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8698 on 271 degrees of freedom
Multiple R-squared:  0.1381,    Adjusted R-squared:  0.08721 
F-statistic: 2.714 on 16 and 271 DF,  p-value: 0.000502

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL4_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL4_rank 
Effect size...............: -0.09032 
Standard error............: 0.055013 
Odds ratio (effect size)..: 0.914 
Lower 95% CI..............: 0.82 
Upper 95% CI..............: 1.018 
T-value...................: -1.641809 
P-value...................: 0.1017895 
R^2.......................: 0.138099 
Adjusted r^2..............: 0.087212 
Sample size of AE DB......: 2423 
Sample size of model......: 288 
Missing data %............: 88.11391 

- processing IL5_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year + Med.Statin.LLD + 
    MedHx_CVD + stenose, data = currentDF)

Coefficients:
            (Intercept)               Gendermale              ORdate_year        Med.Statin.LLDyes             MedHx_CVDyes            stenose70-90%  
               454.8284                   0.2136                  -0.2275                  -0.2701                   0.1515                   0.5440  
          stenose90-99%  stenose100% (Occlusion)  
                 0.4301                  -0.2911  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8321 -0.5718 -0.0281  0.4503  2.4860 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.794e+02  1.132e+02   4.235 3.07e-05 ***
currentDF[, TRAIT]        -5.024e-02  5.133e-02  -0.979   0.3285    
Age                        8.383e-03  6.514e-03   1.287   0.1991    
Gendermale                 2.335e-01  1.122e-01   2.082   0.0382 *  
ORdate_year               -2.398e-01  5.651e-02  -4.244 2.96e-05 ***
Hypertension.compositeyes -1.436e-01  1.526e-01  -0.941   0.3475    
DiabetesStatusDiabetes    -2.590e-03  1.303e-01  -0.020   0.9842    
SmokerStatusEx-smoker     -2.053e-01  1.132e-01  -1.814   0.0708 .  
SmokerStatusNever smoked   7.838e-02  1.877e-01   0.418   0.6766    
Med.Statin.LLDyes         -2.196e-01  1.142e-01  -1.923   0.0555 .  
Med.all.antiplateletyes   -2.461e-01  1.943e-01  -1.267   0.2063    
GFR_MDRD                   6.336e-04  2.979e-03   0.213   0.8317    
BMI                        3.290e-03  1.498e-02   0.220   0.8263    
MedHx_CVDyes               1.430e-01  1.062e-01   1.347   0.1790    
stenose70-90%              4.690e-01  2.921e-01   1.606   0.1094    
stenose90-99%              3.491e-01  2.893e-01   1.207   0.2284    
stenose100% (Occlusion)   -6.651e-01  6.098e-01  -1.091   0.2763    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8636 on 290 degrees of freedom
Multiple R-squared:  0.1351,    Adjusted R-squared:  0.08733 
F-statistic:  2.83 on 16 and 290 DF,  p-value: 0.0002724

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL5_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL5_rank 
Effect size...............: -0.050244 
Standard error............: 0.051331 
Odds ratio (effect size)..: 0.951 
Lower 95% CI..............: 0.86 
Upper 95% CI..............: 1.052 
T-value...................: -0.97881 
P-value...................: 0.3284897 
R^2.......................: 0.135052 
Adjusted r^2..............: 0.087331 
Sample size of AE DB......: 2423 
Sample size of model......: 307 
Missing data %............: 87.32976 

- processing IL6_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + SmokerStatus + Med.all.antiplatelet + 
    stenose, data = currentDF)

Coefficients:
             (Intercept)        currentDF[, TRAIT]                       Age                Gendermale               ORdate_year     SmokerStatusEx-smoker  
               536.89076                   0.09124                   0.01430                   0.29158                  -0.26864                  -0.29724  
SmokerStatusNever smoked   Med.all.antiplateletyes             stenose50-70%             stenose70-90%             stenose90-99%   stenose100% (Occlusion)  
                 0.00165                  -0.25853                  -0.21202                   0.30343                   0.13804                  -0.79164  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.56234 -0.56044 -0.05685  0.44205  2.87297 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                5.149e+02  1.115e+02   4.618 5.76e-06 ***
currentDF[, TRAIT]         8.383e-02  5.097e-02   1.645   0.1010    
Age                        1.232e-02  6.825e-03   1.806   0.0720 .  
Gendermale                 2.905e-01  1.146e-01   2.534   0.0118 *  
ORdate_year               -2.574e-01  5.561e-02  -4.629 5.49e-06 ***
Hypertension.compositeyes -7.928e-02  1.587e-01  -0.499   0.6178    
DiabetesStatusDiabetes     7.003e-02  1.327e-01   0.528   0.5982    
SmokerStatusEx-smoker     -2.770e-01  1.160e-01  -2.388   0.0176 *  
SmokerStatusNever smoked   3.238e-02  1.867e-01   0.173   0.8625    
Med.Statin.LLDyes         -1.651e-01  1.163e-01  -1.419   0.1570    
Med.all.antiplateletyes   -2.393e-01  1.840e-01  -1.301   0.1944    
GFR_MDRD                  -6.664e-04  3.069e-03  -0.217   0.8283    
BMI                       -5.253e-03  1.457e-02  -0.360   0.7188    
MedHx_CVDyes               8.727e-02  1.080e-01   0.808   0.4199    
stenose50-70%             -2.776e-01  6.977e-01  -0.398   0.6910    
stenose70-90%              2.695e-01  6.507e-01   0.414   0.6790    
stenose90-99%              9.198e-02  6.475e-01   0.142   0.8871    
stenose100% (Occlusion)   -8.701e-01  8.633e-01  -1.008   0.3144    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8929 on 298 degrees of freedom
Multiple R-squared:  0.1513,    Adjusted R-squared:  0.1029 
F-statistic: 3.126 on 17 and 298 DF,  p-value: 4.06e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL6_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL6_rank 
Effect size...............: 0.083834 
Standard error............: 0.050965 
Odds ratio (effect size)..: 1.087 
Lower 95% CI..............: 0.984 
Upper 95% CI..............: 1.202 
T-value...................: 1.644913 
P-value...................: 0.1010421 
R^2.......................: 0.151347 
Adjusted r^2..............: 0.102934 
Sample size of AE DB......: 2423 
Sample size of model......: 316 
Missing data %............: 86.95832 

- processing IL8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + GFR_MDRD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes            GFR_MDRD  
        630.898226            0.294590            0.249463           -0.314914           -0.172490           -0.004928  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0692 -0.4832 -0.1142  0.4492  2.8441 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               633.387067 103.960623   6.093 3.54e-09 ***
currentDF[, TRAIT]          0.278350   0.051053   5.452 1.07e-07 ***
Age                         0.001968   0.006444   0.305   0.7603    
Gendermale                  0.298238   0.110575   2.697   0.0074 ** 
ORdate_year                -0.316106   0.051862  -6.095 3.49e-09 ***
Hypertension.compositeyes  -0.089396   0.152294  -0.587   0.5577    
DiabetesStatusDiabetes      0.074380   0.127177   0.585   0.5591    
SmokerStatusEx-smoker      -0.112578   0.109747  -1.026   0.3058    
SmokerStatusNever smoked    0.162170   0.183369   0.884   0.3772    
Med.Statin.LLDyes          -0.183624   0.109619  -1.675   0.0950 .  
Med.all.antiplateletyes    -0.003682   0.176039  -0.021   0.9833    
GFR_MDRD                   -0.004069   0.002787  -1.460   0.1453    
BMI                        -0.011868   0.013765  -0.862   0.3893    
MedHx_CVDyes                0.081132   0.103351   0.785   0.4331    
stenose50-70%              -0.339190   0.664109  -0.511   0.6099    
stenose70-90%               0.156846   0.612840   0.256   0.7982    
stenose90-99%               0.008115   0.610594   0.013   0.9894    
stenose100% (Occlusion)    -0.390377   0.792644  -0.492   0.6227    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8431 on 289 degrees of freedom
Multiple R-squared:  0.2311,    Adjusted R-squared:  0.1859 
F-statistic:  5.11 on 17 and 289 DF,  p-value: 9.142e-10

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL8_rank 
Effect size...............: 0.27835 
Standard error............: 0.051053 
Odds ratio (effect size)..: 1.321 
Lower 95% CI..............: 1.195 
Upper 95% CI..............: 1.46 
T-value...................: 5.452229 
P-value...................: 1.067917e-07 
R^2.......................: 0.231112 
Adjusted r^2..............: 0.185884 
Sample size of AE DB......: 2423 
Sample size of model......: 307 
Missing data %............: 87.32976 

- processing IL9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + DiabetesStatus + Med.Statin.LLD + GFR_MDRD, 
    data = currentDF)

Coefficients:
           (Intercept)      currentDF[, TRAIT]              Gendermale             ORdate_year  DiabetesStatusDiabetes       Med.Statin.LLDyes                GFR_MDRD  
            384.488719                0.093561                0.317187               -0.191987                0.202138               -0.236999               -0.003788  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.86228 -0.56593 -0.09133  0.44977  2.87992 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                3.976e+02  9.510e+01   4.181 3.72e-05 ***
currentDF[, TRAIT]         8.820e-02  5.159e-02   1.709  0.08832 .  
Age                       -8.335e-04  6.525e-03  -0.128  0.89844    
Gendermale                 3.226e-01  1.126e-01   2.866  0.00443 ** 
ORdate_year               -1.982e-01  4.745e-02  -4.176 3.80e-05 ***
Hypertension.compositeyes -1.557e-01  1.555e-01  -1.002  0.31720    
DiabetesStatusDiabetes     2.314e-01  1.333e-01   1.736  0.08349 .  
SmokerStatusEx-smoker     -6.849e-02  1.152e-01  -0.595  0.55256    
SmokerStatusNever smoked   7.397e-02  1.718e-01   0.431  0.66704    
Med.Statin.LLDyes         -2.489e-01  1.186e-01  -2.100  0.03652 *  
Med.all.antiplateletyes   -2.231e-01  1.892e-01  -1.179  0.23912    
GFR_MDRD                  -3.231e-03  2.829e-03  -1.142  0.25419    
BMI                       -1.787e-02  1.389e-02  -1.286  0.19920    
MedHx_CVDyes               1.148e-01  1.073e-01   1.069  0.28566    
stenose50-70%             -2.741e-01  7.202e-01  -0.381  0.70378    
stenose70-90%              1.169e-01  6.716e-01   0.174  0.86195    
stenose90-99%              3.895e-02  6.685e-01   0.058  0.95357    
stenose100% (Occlusion)   -8.265e-01  8.305e-01  -0.995  0.32034    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9278 on 328 degrees of freedom
Multiple R-squared:  0.1322,    Adjusted R-squared:  0.08727 
F-statistic:  2.94 on 17 and 328 DF,  p-value: 9.979e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL9_rank 
Effect size...............: 0.088196 
Standard error............: 0.051594 
Odds ratio (effect size)..: 1.092 
Lower 95% CI..............: 0.987 
Upper 95% CI..............: 1.208 
T-value...................: 1.709435 
P-value...................: 0.08831622 
R^2.......................: 0.132246 
Adjusted r^2..............: 0.087271 
Sample size of AE DB......: 2423 
Sample size of model......: 346 
Missing data %............: 85.72018 

- processing IL10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year + SmokerStatus + 
    Med.Statin.LLD + Med.all.antiplatelet + stenose, data = currentDF)

Coefficients:
             (Intercept)                Gendermale               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked         Med.Statin.LLDyes  
                476.6969                    0.3218                   -0.2382                   -0.2260                    0.1043                   -0.2430  
 Med.all.antiplateletyes             stenose70-90%             stenose90-99%   stenose100% (Occlusion)  
                 -0.3095                    0.4474                    0.3865                   -0.7015  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.74045 -0.60013  0.00664  0.43651  2.50449 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.916e+02  1.294e+02   3.798 0.000182 ***
currentDF[, TRAIT]        -4.521e-02  5.845e-02  -0.773 0.439964    
Age                        6.254e-03  7.019e-03   0.891 0.373785    
Gendermale                 3.129e-01  1.224e-01   2.556 0.011150 *  
ORdate_year               -2.457e-01  6.458e-02  -3.804 0.000177 ***
Hypertension.compositeyes -1.539e-01  1.699e-01  -0.906 0.365744    
DiabetesStatusDiabetes     5.404e-02  1.404e-01   0.385 0.700726    
SmokerStatusEx-smoker     -2.513e-01  1.215e-01  -2.068 0.039665 *  
SmokerStatusNever smoked   1.117e-01  1.984e-01   0.563 0.573674    
Med.Statin.LLDyes         -2.335e-01  1.229e-01  -1.900 0.058569 .  
Med.all.antiplateletyes   -2.998e-01  2.088e-01  -1.435 0.152359    
GFR_MDRD                  -1.148e-03  3.309e-03  -0.347 0.728890    
BMI                        2.322e-04  1.607e-02   0.014 0.988481    
MedHx_CVDyes               6.599e-02  1.178e-01   0.560 0.575865    
stenose70-90%              4.422e-01  3.196e-01   1.384 0.167585    
stenose90-99%              3.663e-01  3.147e-01   1.164 0.245494    
stenose100% (Occlusion)   -7.035e-01  6.363e-01  -1.106 0.269961    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8824 on 258 degrees of freedom
Multiple R-squared:  0.1392,    Adjusted R-squared:  0.08582 
F-statistic: 2.608 on 16 and 258 DF,  p-value: 0.0008597

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL10_rank 
Effect size...............: -0.045209 
Standard error............: 0.058451 
Odds ratio (effect size)..: 0.956 
Lower 95% CI..............: 0.852 
Upper 95% CI..............: 1.072 
T-value...................: -0.773451 
P-value...................: 0.4399637 
R^2.......................: 0.139206 
Adjusted r^2..............: 0.085824 
Sample size of AE DB......: 2423 
Sample size of model......: 275 
Missing data %............: 88.65043 

- processing IL12_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Age + Gender + ORdate_year + 
    SmokerStatus, data = currentDF)

Coefficients:
             (Intercept)                       Age                Gendermale               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked  
               532.77260                   0.01229                   0.26064                  -0.26656                  -0.25418                   0.06294  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7378 -0.5775 -0.0569  0.4343  2.5812 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                5.162e+02  1.229e+02   4.198 3.65e-05 ***
currentDF[, TRAIT]        -6.332e-02  5.563e-02  -1.138   0.2561    
Age                        8.586e-03  6.886e-03   1.247   0.2135    
Gendermale                 2.577e-01  1.175e-01   2.194   0.0291 *  
ORdate_year               -2.581e-01  6.135e-02  -4.207 3.53e-05 ***
Hypertension.compositeyes -1.674e-01  1.644e-01  -1.018   0.3097    
DiabetesStatusDiabetes     8.757e-02  1.350e-01   0.648   0.5172    
SmokerStatusEx-smoker     -2.363e-01  1.203e-01  -1.964   0.0506 .  
SmokerStatusNever smoked   1.287e-01  1.867e-01   0.689   0.4913    
Med.Statin.LLDyes         -1.785e-01  1.199e-01  -1.488   0.1379    
Med.all.antiplateletyes   -2.245e-01  2.009e-01  -1.118   0.2647    
GFR_MDRD                  -1.184e-03  3.189e-03  -0.371   0.7107    
BMI                       -1.466e-04  1.592e-02  -0.009   0.9927    
MedHx_CVDyes               7.989e-02  1.126e-01   0.709   0.4788    
stenose70-90%              4.777e-01  2.990e-01   1.598   0.1112    
stenose90-99%              3.531e-01  2.944e-01   1.199   0.2315    
stenose100% (Occlusion)   -6.713e-01  7.179e-01  -0.935   0.3506    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8686 on 270 degrees of freedom
Multiple R-squared:  0.1387,    Adjusted R-squared:  0.08761 
F-statistic: 2.716 on 16 and 270 DF,  p-value: 0.0004971

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL12_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL12_rank 
Effect size...............: -0.063318 
Standard error............: 0.055632 
Odds ratio (effect size)..: 0.939 
Lower 95% CI..............: 0.842 
Upper 95% CI..............: 1.047 
T-value...................: -1.138172 
P-value...................: 0.2560576 
R^2.......................: 0.138651 
Adjusted r^2..............: 0.087608 
Sample size of AE DB......: 2423 
Sample size of model......: 287 
Missing data %............: 88.15518 

- processing IL13_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
              411.04632                  0.10993                  0.25064                 -0.20526                 -0.17670                 -0.25620  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.37642                  0.14323                  0.01004                 -0.77295  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.84779 -0.58825 -0.09605  0.49423  2.90353 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               415.427878  90.309630   4.600 5.79e-06 ***
currentDF[, TRAIT]          0.113108   0.048211   2.346  0.01949 *  
Age                         0.002954   0.005968   0.495  0.62094    
Gendermale                  0.267744   0.102927   2.601  0.00966 ** 
ORdate_year                -0.207271   0.045061  -4.600 5.79e-06 ***
Hypertension.compositeyes  -0.037186   0.139942  -0.266  0.79060    
DiabetesStatusDiabetes      0.123337   0.117763   1.047  0.29562    
SmokerStatusEx-smoker      -0.108876   0.104663  -1.040  0.29889    
SmokerStatusNever smoked    0.023734   0.161413   0.147  0.88318    
Med.Statin.LLDyes          -0.184569   0.108450  -1.702  0.08961 .  
Med.all.antiplateletyes    -0.224056   0.164980  -1.358  0.17525    
GFR_MDRD                   -0.002470   0.002644  -0.934  0.35086    
BMI                        -0.014774   0.012759  -1.158  0.24763    
MedHx_CVDyes                0.077430   0.097591   0.793  0.42804    
stenose50-70%              -0.374935   0.698676  -0.537  0.59184    
stenose70-90%               0.134328   0.657326   0.204  0.83819    
stenose90-99%              -0.015391   0.655487  -0.023  0.98128    
stenose100% (Occlusion)    -0.784723   0.809827  -0.969  0.33317    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.909 on 375 degrees of freedom
Multiple R-squared:  0.1231,    Adjusted R-squared:  0.08333 
F-statistic: 3.096 on 17 and 375 DF,  p-value: 3.899e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL13_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL13_rank 
Effect size...............: 0.113108 
Standard error............: 0.048211 
Odds ratio (effect size)..: 1.12 
Lower 95% CI..............: 1.019 
Upper 95% CI..............: 1.231 
T-value...................: 2.346125 
P-value...................: 0.01948982 
R^2.......................: 0.123083 
Adjusted r^2..............: 0.083329 
Sample size of AE DB......: 2423 
Sample size of model......: 393 
Missing data %............: 83.78044 

- processing IL21_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
             405.182671                 0.104808                 0.244204                -0.202331                -0.179626                -0.251704  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
              -0.388887                 0.136948                 0.004196                -0.802007  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.83602 -0.60273 -0.08754  0.48268  2.91794 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               409.015054  90.055759   4.542 7.52e-06 ***
currentDF[, TRAIT]          0.106463   0.048741   2.184   0.0296 *  
Age                         0.002770   0.005937   0.467   0.6411    
Gendermale                  0.260558   0.102780   2.535   0.0116 *  
ORdate_year                -0.204048   0.044933  -4.541 7.54e-06 ***
Hypertension.compositeyes  -0.043645   0.139743  -0.312   0.7550    
DiabetesStatusDiabetes      0.114297   0.117547   0.972   0.3315    
SmokerStatusEx-smoker      -0.102813   0.104408  -0.985   0.3254    
SmokerStatusNever smoked    0.025817   0.161324   0.160   0.8729    
Med.Statin.LLDyes          -0.188168   0.108176  -1.739   0.0828 .  
Med.all.antiplateletyes    -0.220278   0.164886  -1.336   0.1824    
GFR_MDRD                   -0.002499   0.002643  -0.946   0.3449    
BMI                        -0.015318   0.012747  -1.202   0.2302    
MedHx_CVDyes                0.077591   0.097267   0.798   0.4255    
stenose50-70%              -0.388909   0.699121  -0.556   0.5783    
stenose70-90%               0.128290   0.657599   0.195   0.8454    
stenose90-99%              -0.019985   0.655858  -0.030   0.9757    
stenose100% (Occlusion)    -0.820034   0.809930  -1.012   0.3120    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9088 on 376 degrees of freedom
Multiple R-squared:  0.1213,    Adjusted R-squared:  0.0816 
F-statistic: 3.054 on 17 and 376 DF,  p-value: 4.895e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IL21_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IL21_rank 
Effect size...............: 0.106463 
Standard error............: 0.048741 
Odds ratio (effect size)..: 1.112 
Lower 95% CI..............: 1.011 
Upper 95% CI..............: 1.224 
T-value...................: 2.184252 
P-value...................: 0.02956092 
R^2.......................: 0.121324 
Adjusted r^2..............: 0.081597 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing INFG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet, 
    data = currentDF)

Coefficients:
             (Intercept)        currentDF[, TRAIT]                Gendermale               ORdate_year     SmokerStatusEx-smoker  SmokerStatusNever smoked  
               621.99368                  -0.09008                   0.32069                  -0.31052                  -0.16285                   0.16166  
       Med.Statin.LLDyes   Med.all.antiplateletyes  
                -0.23576                  -0.26283  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.71445 -0.58797 -0.02635  0.45200  2.75578 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               612.052639 117.722658   5.199 3.80e-07 ***
currentDF[, TRAIT]         -0.080391   0.060445  -1.330  0.18458    
Age                         0.005485   0.006683   0.821  0.41247    
Gendermale                  0.329615   0.116534   2.828  0.00501 ** 
ORdate_year                -0.305579   0.058730  -5.203 3.73e-07 ***
Hypertension.compositeyes  -0.120130   0.160966  -0.746  0.45609    
DiabetesStatusDiabetes      0.089243   0.131354   0.679  0.49742    
SmokerStatusEx-smoker      -0.202089   0.115821  -1.745  0.08208 .  
SmokerStatusNever smoked    0.181199   0.187965   0.964  0.33585    
Med.Statin.LLDyes          -0.239536   0.120075  -1.995  0.04700 *  
Med.all.antiplateletyes    -0.284206   0.183541  -1.548  0.12261    
GFR_MDRD                   -0.001487   0.002996  -0.496  0.61998    
BMI                        -0.008408   0.014307  -0.588  0.55720    
MedHx_CVDyes                0.058302   0.111399   0.523  0.60112    
stenose50-70%              -0.252475   0.707159  -0.357  0.72133    
stenose70-90%               0.173170   0.649749   0.267  0.79003    
stenose90-99%               0.048313   0.645777   0.075  0.94041    
stenose100% (Occlusion)    -1.049197   0.928350  -1.130  0.25934    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8866 on 288 degrees of freedom
Multiple R-squared:  0.163, Adjusted R-squared:  0.1136 
F-statistic:   3.3 on 17 and 288 DF,  p-value: 1.674e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' INFG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: INFG_rank 
Effect size...............: -0.080391 
Standard error............: 0.060445 
Odds ratio (effect size)..: 0.923 
Lower 95% CI..............: 0.82 
Upper 95% CI..............: 1.039 
T-value...................: -1.329984 
P-value...................: 0.1845759 
R^2.......................: 0.163039 
Adjusted r^2..............: 0.113635 
Sample size of AE DB......: 2423 
Sample size of model......: 306 
Missing data %............: 87.37103 

- processing TNFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year + Med.Statin.LLD, 
    data = currentDF)

Coefficients:
      (Intercept)         Gendermale        ORdate_year  Med.Statin.LLDyes  
         556.5560             0.2372            -0.2780            -0.1648  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7754 -0.5489 -0.0152  0.4509  2.5088 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                5.433e+02  1.232e+02   4.412 1.50e-05 ***
currentDF[, TRAIT]        -3.268e-02  5.481e-02  -0.596   0.5516    
Age                        7.883e-03  6.839e-03   1.153   0.2501    
Gendermale                 2.726e-01  1.186e-01   2.298   0.0223 *  
ORdate_year               -2.718e-01  6.148e-02  -4.420 1.44e-05 ***
Hypertension.compositeyes -1.085e-01  1.638e-01  -0.662   0.5084    
DiabetesStatusDiabetes    -4.051e-02  1.357e-01  -0.299   0.7655    
SmokerStatusEx-smoker     -1.902e-01  1.203e-01  -1.582   0.1149    
SmokerStatusNever smoked   6.383e-02  1.923e-01   0.332   0.7402    
Med.Statin.LLDyes         -1.618e-01  1.197e-01  -1.352   0.1776    
Med.all.antiplateletyes   -1.498e-01  2.050e-01  -0.730   0.4658    
GFR_MDRD                  -5.336e-04  3.171e-03  -0.168   0.8665    
BMI                        2.839e-03  1.606e-02   0.177   0.8598    
MedHx_CVDyes               8.708e-02  1.144e-01   0.761   0.4472    
stenose70-90%              4.288e-01  2.998e-01   1.430   0.1539    
stenose90-99%              3.476e-01  2.943e-01   1.181   0.2387    
stenose100% (Occlusion)   -5.880e-01  7.201e-01  -0.817   0.4149    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8656 on 262 degrees of freedom
Multiple R-squared:  0.1332,    Adjusted R-squared:  0.08031 
F-statistic: 2.517 on 16 and 262 DF,  p-value: 0.001306

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TNFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TNFA_rank 
Effect size...............: -0.032677 
Standard error............: 0.05481 
Odds ratio (effect size)..: 0.968 
Lower 95% CI..............: 0.869 
Upper 95% CI..............: 1.078 
T-value...................: -0.596184 
P-value...................: 0.5515672 
R^2.......................: 0.133239 
Adjusted r^2..............: 0.080308 
Sample size of AE DB......: 2423 
Sample size of model......: 279 
Missing data %............: 88.48535 

- processing MIF_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
              327.59797                  0.08919                  0.25491                 -0.16366                 -0.18181                 -0.25784  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.27839                  0.23342                  0.09565                 -0.73167  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.73867 -0.57017 -0.07035  0.47988  3.01508 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               338.199890  97.550336   3.467 0.000587 ***
currentDF[, TRAIT]          0.087501   0.053520   1.635 0.102901    
Age                         0.001857   0.005921   0.314 0.753939    
Gendermale                  0.269380   0.102894   2.618 0.009201 ** 
ORdate_year                -0.168710   0.048674  -3.466 0.000589 ***
Hypertension.compositeyes  -0.038802   0.140333  -0.277 0.782315    
DiabetesStatusDiabetes      0.129309   0.118727   1.089 0.276795    
SmokerStatusEx-smoker      -0.070581   0.104977  -0.672 0.501775    
SmokerStatusNever smoked    0.079068   0.160842   0.492 0.623297    
Med.Statin.LLDyes          -0.192336   0.108491  -1.773 0.077065 .  
Med.all.antiplateletyes    -0.229251   0.165815  -1.383 0.167619    
GFR_MDRD                   -0.002235   0.002668  -0.838 0.402740    
BMI                        -0.017199   0.012801  -1.344 0.179884    
MedHx_CVDyes                0.072400   0.097705   0.741 0.459152    
stenose50-70%              -0.308804   0.699305  -0.442 0.659043    
stenose70-90%               0.200661   0.657685   0.305 0.760457    
stenose90-99%               0.051597   0.655860   0.079 0.937337    
stenose100% (Occlusion)    -0.787362   0.811876  -0.970 0.332767    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9113 on 376 degrees of freedom
Multiple R-squared:  0.1165,    Adjusted R-squared:  0.07651 
F-statistic: 2.915 on 17 and 376 DF,  p-value: 0.0001035

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIF_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIF_rank 
Effect size...............: 0.087501 
Standard error............: 0.05352 
Odds ratio (effect size)..: 1.091 
Lower 95% CI..............: 0.983 
Upper 95% CI..............: 1.212 
T-value...................: 1.634929 
P-value...................: 0.1029007 
R^2.......................: 0.116456 
Adjusted r^2..............: 0.076509 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing MCP1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + GFR_MDRD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes            GFR_MDRD  
        276.033577            0.232392            0.233467           -0.137843           -0.150335           -0.004144  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.05653 -0.61057 -0.04983  0.49520  2.92997 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               294.072490  89.527059   3.285  0.00112 ** 
currentDF[, TRAIT]          0.229772   0.045925   5.003 8.71e-07 ***
Age                         0.002554   0.005791   0.441  0.65949    
Gendermale                  0.236517   0.100829   2.346  0.01951 *  
ORdate_year                -0.146876   0.044663  -3.289  0.00110 ** 
Hypertension.compositeyes  -0.014016   0.136176  -0.103  0.91808    
DiabetesStatusDiabetes      0.166272   0.115477   1.440  0.15075    
SmokerStatusEx-smoker      -0.081742   0.101723  -0.804  0.42216    
SmokerStatusNever smoked    0.024922   0.156109   0.160  0.87325    
Med.Statin.LLDyes          -0.162972   0.105611  -1.543  0.12365    
Med.all.antiplateletyes    -0.180003   0.164625  -1.093  0.27492    
GFR_MDRD                   -0.002865   0.002574  -1.113  0.26635    
BMI                        -0.010551   0.012479  -0.845  0.39840    
MedHx_CVDyes                0.057482   0.095203   0.604  0.54635    
stenose50-70%              -0.170783   0.676686  -0.252  0.80089    
stenose70-90%               0.315509   0.635829   0.496  0.62003    
stenose90-99%               0.208862   0.633630   0.330  0.74187    
stenose100% (Occlusion)    -0.388750   0.788899  -0.493  0.62246    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8819 on 372 degrees of freedom
Multiple R-squared:  0.1648,    Adjusted R-squared:  0.1266 
F-statistic: 4.318 on 17 and 372 DF,  p-value: 4.187e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MCP1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MCP1_rank 
Effect size...............: 0.229772 
Standard error............: 0.045925 
Odds ratio (effect size)..: 1.258 
Lower 95% CI..............: 1.15 
Upper 95% CI..............: 1.377 
T-value...................: 5.003229 
P-value...................: 8.711731e-07 
R^2.......................: 0.164813 
Adjusted r^2..............: 0.126645 
Sample size of AE DB......: 2423 
Sample size of model......: 390 
Missing data %............: 83.90425 

- processing MIP1a_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + DiabetesStatus + Med.Statin.LLD, data = currentDF)

Coefficients:
           (Intercept)      currentDF[, TRAIT]              Gendermale             ORdate_year  DiabetesStatusDiabetes       Med.Statin.LLDyes  
              390.8669                  0.1196                  0.2838                 -0.1953                  0.1815                 -0.2409  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.85101 -0.60103 -0.09931  0.46756  2.87469 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                3.936e+02  9.324e+01   4.221 3.12e-05 ***
currentDF[, TRAIT]         1.233e-01  5.143e-02   2.398  0.01703 *  
Age                        1.084e-04  6.371e-03   0.017  0.98644    
Gendermale                 2.983e-01  1.109e-01   2.691  0.00749 ** 
ORdate_year               -1.962e-01  4.653e-02  -4.217 3.17e-05 ***
Hypertension.compositeyes -1.460e-01  1.499e-01  -0.974  0.33074    
DiabetesStatusDiabetes     1.943e-01  1.267e-01   1.533  0.12620    
SmokerStatusEx-smoker     -1.072e-01  1.123e-01  -0.955  0.34044    
SmokerStatusNever smoked   3.720e-02  1.686e-01   0.221  0.82549    
Med.Statin.LLDyes         -2.502e-01  1.158e-01  -2.160  0.03150 *  
Med.all.antiplateletyes   -1.973e-01  1.841e-01  -1.072  0.28457    
GFR_MDRD                  -2.464e-03  2.747e-03  -0.897  0.37043    
BMI                       -1.472e-02  1.340e-02  -1.099  0.27257    
MedHx_CVDyes               9.074e-02  1.049e-01   0.865  0.38748    
stenose50-70%             -3.553e-01  7.163e-01  -0.496  0.62020    
stenose70-90%              3.845e-02  6.682e-01   0.058  0.95415    
stenose90-99%             -5.637e-02  6.657e-01  -0.085  0.93256    
stenose100% (Occlusion)   -8.718e-01  8.247e-01  -1.057  0.29121    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9209 on 339 degrees of freedom
Multiple R-squared:  0.1316,    Adjusted R-squared:  0.0881 
F-statistic: 3.023 on 17 and 339 DF,  p-value: 6.264e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIP1a_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIP1a_rank 
Effect size...............: 0.123314 
Standard error............: 0.051427 
Odds ratio (effect size)..: 1.131 
Lower 95% CI..............: 1.023 
Upper 95% CI..............: 1.251 
T-value...................: 2.397858 
P-value...................: 0.0170316 
R^2.......................: 0.131645 
Adjusted r^2..............: 0.088099 
Sample size of AE DB......: 2423 
Sample size of model......: 357 
Missing data %............: 85.2662 

- processing RANTES_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + GFR_MDRD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes            GFR_MDRD  
        305.057176            0.094953            0.262233           -0.152326           -0.181767           -0.004042  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.71821 -0.56090 -0.08476  0.48422  2.96589 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               316.791237  95.783310   3.307  0.00103 **
currentDF[, TRAIT]          0.109248   0.050329   2.171  0.03059 * 
Age                         0.001929   0.005936   0.325  0.74536   
Gendermale                  0.262922   0.104073   2.526  0.01194 * 
ORdate_year                -0.158012   0.047789  -3.306  0.00104 **
Hypertension.compositeyes  -0.110746   0.141509  -0.783  0.43436   
DiabetesStatusDiabetes      0.170591   0.119654   1.426  0.15480   
SmokerStatusEx-smoker      -0.058091   0.104846  -0.554  0.57987   
SmokerStatusNever smoked    0.080405   0.160410   0.501  0.61650   
Med.Statin.LLDyes          -0.199272   0.108726  -1.833  0.06764 . 
Med.all.antiplateletyes    -0.176983   0.169594  -1.044  0.29737   
GFR_MDRD                   -0.003006   0.002650  -1.135  0.25729   
BMI                        -0.017358   0.012826  -1.353  0.17676   
MedHx_CVDyes                0.083674   0.098586   0.849  0.39658   
stenose50-70%              -0.274462   0.698422  -0.393  0.69456   
stenose70-90%               0.197684   0.653277   0.303  0.76236   
stenose90-99%               0.102251   0.650674   0.157  0.87522   
stenose100% (Occlusion)    -0.839014   0.809301  -1.037  0.30055   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9056 on 369 degrees of freedom
Multiple R-squared:  0.1196,    Adjusted R-squared:  0.07904 
F-statistic: 2.949 on 17 and 369 DF,  p-value: 8.759e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' RANTES_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: RANTES_rank 
Effect size...............: 0.109248 
Standard error............: 0.050329 
Odds ratio (effect size)..: 1.115 
Lower 95% CI..............: 1.011 
Upper 95% CI..............: 1.231 
T-value...................: 2.170697 
P-value...................: 0.03059111 
R^2.......................: 0.119599 
Adjusted r^2..............: 0.079039 
Sample size of AE DB......: 2423 
Sample size of model......: 387 
Missing data %............: 84.02806 

- processing MIG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year + Med.Statin.LLD + 
    Med.all.antiplatelet + stenose, data = currentDF)

Coefficients:
            (Intercept)               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes            stenose50-70%  
               397.1635                   0.2619                  -0.1984                  -0.1993                  -0.2726                  -0.2302  
          stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
                 0.2540                   0.1541                  -0.7695  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.83555 -0.57764 -0.07849  0.47187  2.93866 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               433.402151  95.084317   4.558 7.05e-06 ***
currentDF[, TRAIT]          0.057170   0.051539   1.109   0.2680    
Age                         0.001490   0.006128   0.243   0.8080    
Gendermale                  0.267166   0.105118   2.542   0.0114 *  
ORdate_year                -0.216152   0.047444  -4.556 7.12e-06 ***
Hypertension.compositeyes  -0.083627   0.143210  -0.584   0.5596    
DiabetesStatusDiabetes      0.149945   0.121110   1.238   0.2165    
SmokerStatusEx-smoker      -0.088808   0.107050  -0.830   0.4073    
SmokerStatusNever smoked    0.026311   0.166229   0.158   0.8743    
Med.Statin.LLDyes          -0.207232   0.110477  -1.876   0.0615 .  
Med.all.antiplateletyes    -0.251581   0.169125  -1.488   0.1377    
GFR_MDRD                   -0.002510   0.002682  -0.936   0.3500    
BMI                        -0.015311   0.012951  -1.182   0.2379    
MedHx_CVDyes                0.050956   0.100224   0.508   0.6115    
stenose50-70%              -0.332955   0.708961  -0.470   0.6389    
stenose70-90%               0.149226   0.663405   0.225   0.8222    
stenose90-99%               0.036439   0.661283   0.055   0.9561    
stenose100% (Occlusion)    -0.870780   0.818548  -1.064   0.2881    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9165 on 365 degrees of freedom
Multiple R-squared:  0.1144,    Adjusted R-squared:  0.07314 
F-statistic: 2.773 on 17 and 365 DF,  p-value: 0.0002245

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MIG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MIG_rank 
Effect size...............: 0.05717 
Standard error............: 0.051539 
Odds ratio (effect size)..: 1.059 
Lower 95% CI..............: 0.957 
Upper 95% CI..............: 1.171 
T-value...................: 1.109267 
P-value...................: 0.2680453 
R^2.......................: 0.114389 
Adjusted r^2..............: 0.073141 
Sample size of AE DB......: 2423 
Sample size of model......: 383 
Missing data %............: 84.19315 

- processing IP10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + DiabetesStatus + Med.Statin.LLD + MedHx_CVD, 
    data = currentDF)

Coefficients:
           (Intercept)      currentDF[, TRAIT]              Gendermale             ORdate_year  DiabetesStatusDiabetes       Med.Statin.LLDyes            MedHx_CVDyes  
              394.1860                  0.1118                  0.2846                 -0.1970                  0.1867                 -0.2111                  0.1530  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.80479 -0.55718 -0.07259  0.49249  2.92738 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               392.264600  93.612243   4.190 3.58e-05 ***
currentDF[, TRAIT]          0.114320   0.050694   2.255  0.02478 *  
Age                         0.001696   0.006430   0.264  0.79215    
Gendermale                  0.291645   0.109263   2.669  0.00798 ** 
ORdate_year                -0.195688   0.046707  -4.190 3.58e-05 ***
Hypertension.compositeyes  -0.096244   0.148954  -0.646  0.51864    
DiabetesStatusDiabetes      0.198566   0.127435   1.558  0.12014    
SmokerStatusEx-smoker      -0.092502   0.112632  -0.821  0.41208    
SmokerStatusNever smoked   -0.060865   0.175315  -0.347  0.72868    
Med.Statin.LLDyes          -0.221663   0.114899  -1.929  0.05456 .  
Med.all.antiplateletyes    -0.178895   0.173723  -1.030  0.30387    
GFR_MDRD                   -0.002547   0.002792  -0.912  0.36224    
BMI                        -0.015900   0.013497  -1.178  0.23962    
MedHx_CVDyes                0.150332   0.104125   1.444  0.14975    
stenose50-70%              -0.328698   0.704867  -0.466  0.64129    
stenose70-90%               0.119639   0.660407   0.181  0.85635    
stenose90-99%               0.012923   0.657247   0.020  0.98432    
stenose100% (Occlusion)    -0.687557   0.815708  -0.843  0.39989    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9122 on 332 degrees of freedom
Multiple R-squared:  0.1314,    Adjusted R-squared:  0.08696 
F-statistic: 2.955 on 17 and 332 DF,  p-value: 9.137e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' IP10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: IP10_rank 
Effect size...............: 0.11432 
Standard error............: 0.050694 
Odds ratio (effect size)..: 1.121 
Lower 95% CI..............: 1.015 
Upper 95% CI..............: 1.238 
T-value...................: 2.255113 
P-value...................: 0.02477717 
R^2.......................: 0.131437 
Adjusted r^2..............: 0.086963 
Sample size of AE DB......: 2423 
Sample size of model......: 350 
Missing data %............: 85.5551 

- processing Eotaxin1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
              414.66554                  0.08220                  0.24220                 -0.20708                 -0.17596                 -0.24872  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.36331                  0.16201                  0.03217                 -0.80655  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.87499 -0.58734 -0.07708  0.44780  2.97087 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               417.498390  90.931970   4.591 6.02e-06 ***
currentDF[, TRAIT]          0.080481   0.050107   1.606   0.1091    
Age                         0.002049   0.005935   0.345   0.7301    
Gendermale                  0.260287   0.103599   2.512   0.0124 *  
ORdate_year                -0.208268   0.045369  -4.591 6.04e-06 ***
Hypertension.compositeyes  -0.050677   0.140089  -0.362   0.7177    
DiabetesStatusDiabetes      0.110263   0.117855   0.936   0.3501    
SmokerStatusEx-smoker      -0.099123   0.104723  -0.947   0.3445    
SmokerStatusNever smoked    0.033779   0.162004   0.209   0.8349    
Med.Statin.LLDyes          -0.185243   0.108516  -1.707   0.0886 .  
Med.all.antiplateletyes    -0.218136   0.165403  -1.319   0.1880    
GFR_MDRD                   -0.002504   0.002653  -0.944   0.3458    
BMI                        -0.015520   0.012784  -1.214   0.2255    
MedHx_CVDyes                0.077145   0.097579   0.791   0.4297    
stenose50-70%              -0.364847   0.701528  -0.520   0.6033    
stenose70-90%               0.154109   0.659930   0.234   0.8155    
stenose90-99%               0.010521   0.658143   0.016   0.9873    
stenose100% (Occlusion)    -0.828383   0.812917  -1.019   0.3088    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9114 on 376 degrees of freedom
Multiple R-squared:  0.1162,    Adjusted R-squared:  0.07628 
F-statistic: 2.909 on 17 and 376 DF,  p-value: 0.0001069

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' Eotaxin1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: Eotaxin1_rank 
Effect size...............: 0.080481 
Standard error............: 0.050107 
Odds ratio (effect size)..: 1.084 
Lower 95% CI..............: 0.982 
Upper 95% CI..............: 1.196 
T-value...................: 1.606182 
P-value...................: 0.1090734 
R^2.......................: 0.116239 
Adjusted r^2..............: 0.076281 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing TARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD + GFR_MDRD, 
    data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
               237.723792                   0.128988                   0.237129                  -0.118596                  -0.202177                  -0.233406  
                 GFR_MDRD  
                -0.004844  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7881 -0.5603 -0.1068  0.4896  2.7203 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)  
(Intercept)                2.632e+02  1.113e+02   2.364   0.0187 *
currentDF[, TRAIT]         1.240e-01  5.316e-02   2.333   0.0203 *
Age                        1.261e-04  6.320e-03   0.020   0.9841  
Gendermale                 2.380e-01  1.104e-01   2.156   0.0318 *
ORdate_year               -1.310e-01  5.556e-02  -2.358   0.0190 *
Hypertension.compositeyes -2.000e-01  1.487e-01  -1.345   0.1796  
DiabetesStatusDiabetes     1.425e-01  1.279e-01   1.114   0.2662  
SmokerStatusEx-smoker     -3.534e-02  1.133e-01  -0.312   0.7553  
SmokerStatusNever smoked   6.836e-02  1.678e-01   0.408   0.6839  
Med.Statin.LLDyes         -2.679e-01  1.194e-01  -2.243   0.0256 *
Med.all.antiplateletyes   -1.227e-01  1.787e-01  -0.687   0.4928  
GFR_MDRD                  -4.296e-03  2.912e-03  -1.475   0.1412  
BMI                       -2.046e-02  1.398e-02  -1.464   0.1443  
MedHx_CVDyes               3.161e-02  1.064e-01   0.297   0.7667  
stenose50-70%             -3.162e-01  7.028e-01  -0.450   0.6531  
stenose70-90%              1.214e-01  6.552e-01   0.185   0.8531  
stenose90-99%              1.514e-02  6.531e-01   0.023   0.9815  
stenose100% (Occlusion)   -7.670e-01  8.121e-01  -0.945   0.3456  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9061 on 318 degrees of freedom
Multiple R-squared:  0.108, Adjusted R-squared:  0.06026 
F-statistic: 2.264 on 17 and 318 DF,  p-value: 0.00319

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TARC_rank 
Effect size...............: 0.124034 
Standard error............: 0.053158 
Odds ratio (effect size)..: 1.132 
Lower 95% CI..............: 1.02 
Upper 95% CI..............: 1.256 
T-value...................: 2.333299 
P-value...................: 0.02025553 
R^2.......................: 0.107952 
Adjusted r^2..............: 0.060264 
Sample size of AE DB......: 2423 
Sample size of model......: 336 
Missing data %............: 86.13289 

- processing PARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes  
          312.9352              0.1300              0.2676             -0.1564             -0.1703  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.76275 -0.56777 -0.06522  0.49499  3.06302 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               334.699245  94.671396   3.535 0.000458 ***
currentDF[, TRAIT]          0.109715   0.050424   2.176 0.030190 *  
Age                         0.001597   0.005887   0.271 0.786364    
Gendermale                  0.282247   0.102195   2.762 0.006030 ** 
ORdate_year                -0.167046   0.047225  -3.537 0.000455 ***
Hypertension.compositeyes  -0.022396   0.140390  -0.160 0.873339    
DiabetesStatusDiabetes      0.130251   0.118046   1.103 0.270563    
SmokerStatusEx-smoker      -0.083711   0.104194  -0.803 0.422246    
SmokerStatusNever smoked    0.053518   0.160351   0.334 0.738749    
Med.Statin.LLDyes          -0.191845   0.108187  -1.773 0.076993 .  
Med.all.antiplateletyes    -0.182511   0.165129  -1.105 0.269751    
GFR_MDRD                   -0.002411   0.002645  -0.911 0.362630    
BMI                        -0.015971   0.012744  -1.253 0.210910    
MedHx_CVDyes                0.074556   0.097314   0.766 0.444079    
stenose50-70%              -0.169455   0.698458  -0.243 0.808437    
stenose70-90%               0.300234   0.655380   0.458 0.647140    
stenose90-99%               0.157672   0.652982   0.241 0.809327    
stenose100% (Occlusion)    -0.581800   0.813639  -0.715 0.475017    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9088 on 376 degrees of freedom
Multiple R-squared:  0.1212,    Adjusted R-squared:  0.08151 
F-statistic: 3.051 on 17 and 376 DF,  p-value: 4.959e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' PARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: PARC_rank 
Effect size...............: 0.109715 
Standard error............: 0.050424 
Odds ratio (effect size)..: 1.116 
Lower 95% CI..............: 1.011 
Upper 95% CI..............: 1.232 
T-value...................: 2.175832 
P-value...................: 0.03018994 
R^2.......................: 0.12124 
Adjusted r^2..............: 0.081508 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing MDC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + DiabetesStatus + Med.Statin.LLD, data = currentDF)

Coefficients:
           (Intercept)      currentDF[, TRAIT]              Gendermale             ORdate_year  DiabetesStatusDiabetes       Med.Statin.LLDyes  
             348.14977                 0.08718                 0.31526                -0.17399                 0.20694                -0.24560  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.82919 -0.56626 -0.07603  0.44307  2.90328 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               358.629055  99.358952   3.609 0.000354 ***
currentDF[, TRAIT]          0.073564   0.054208   1.357 0.175673    
Age                        -0.001779   0.006266  -0.284 0.776669    
Gendermale                  0.326305   0.110626   2.950 0.003405 ** 
ORdate_year                -0.178688   0.049575  -3.604 0.000360 ***
Hypertension.compositeyes  -0.147400   0.150938  -0.977 0.329491    
DiabetesStatusDiabetes      0.222332   0.128788   1.726 0.085205 .  
SmokerStatusEx-smoker      -0.060232   0.111996  -0.538 0.591069    
SmokerStatusNever smoked    0.074090   0.168858   0.439 0.661109    
Med.Statin.LLDyes          -0.260920   0.115344  -2.262 0.024330 *  
Med.all.antiplateletyes    -0.214591   0.187904  -1.142 0.254257    
GFR_MDRD                   -0.003189   0.002781  -1.147 0.252316    
BMI                        -0.018247   0.013473  -1.354 0.176535    
MedHx_CVDyes                0.109407   0.105124   1.041 0.298741    
stenose50-70%              -0.265247   0.714856  -0.371 0.710834    
stenose70-90%               0.116664   0.666864   0.175 0.861229    
stenose90-99%               0.032181   0.664416   0.048 0.961399    
stenose100% (Occlusion)    -0.846591   0.824170  -1.027 0.305063    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.921 on 336 degrees of freedom
Multiple R-squared:  0.1307,    Adjusted R-squared:  0.08671 
F-statistic: 2.972 on 17 and 336 DF,  p-value: 8.305e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MDC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MDC_rank 
Effect size...............: 0.073564 
Standard error............: 0.054208 
Odds ratio (effect size)..: 1.076 
Lower 95% CI..............: 0.968 
Upper 95% CI..............: 1.197 
T-value...................: 1.357061 
P-value...................: 0.1756727 
R^2.......................: 0.130697 
Adjusted r^2..............: 0.086715 
Sample size of AE DB......: 2423 
Sample size of model......: 354 
Missing data %............: 85.39001 

- processing OPG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
             387.557181                 0.176005                 0.228372                -0.193386                -0.155389                -0.255899  
               GFR_MDRD  
              -0.003847  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.60973 -0.58187 -0.07439  0.49164  2.76577 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               398.165295  89.034156   4.472 1.03e-05 ***
currentDF[, TRAIT]          0.171332   0.045934   3.730 0.000221 ***
Age                         0.002770   0.005859   0.473 0.636586    
Gendermale                  0.249260   0.101988   2.444 0.014985 *  
ORdate_year                -0.198710   0.044423  -4.473 1.02e-05 ***
Hypertension.compositeyes  -0.007183   0.138807  -0.052 0.958757    
DiabetesStatusDiabetes      0.140120   0.116610   1.202 0.230274    
SmokerStatusEx-smoker      -0.117795   0.103470  -1.138 0.255664    
SmokerStatusNever smoked    0.024242   0.159003   0.152 0.878904    
Med.Statin.LLDyes          -0.179756   0.107285  -1.676 0.094669 .  
Med.all.antiplateletyes    -0.250028   0.163436  -1.530 0.126904    
GFR_MDRD                   -0.002801   0.002612  -1.073 0.284179    
BMI                        -0.013525   0.012627  -1.071 0.284821    
MedHx_CVDyes                0.078918   0.096497   0.818 0.413974    
stenose50-70%              -0.242528   0.689611  -0.352 0.725270    
stenose70-90%               0.247590   0.648124   0.382 0.702671    
stenose90-99%               0.103883   0.645828   0.161 0.872296    
stenose100% (Occlusion)    -0.563330   0.802636  -0.702 0.483208    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8992 on 375 degrees of freedom
Multiple R-squared:  0.142, Adjusted R-squared:  0.1031 
F-statistic: 3.652 on 17 and 375 DF,  p-value: 1.799e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' OPG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: OPG_rank 
Effect size...............: 0.171332 
Standard error............: 0.045934 
Odds ratio (effect size)..: 1.187 
Lower 95% CI..............: 1.085 
Upper 95% CI..............: 1.299 
T-value...................: 3.729993 
P-value...................: 0.0002210852 
R^2.......................: 0.142042 
Adjusted r^2..............: 0.103148 
Sample size of AE DB......: 2423 
Sample size of model......: 393 
Missing data %............: 83.78044 

- processing sICAM1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
              330.96847                  0.13643                  0.26079                 -0.16535                 -0.16932                 -0.23566  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.30981                  0.21930                  0.08342                 -0.66366  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.77943 -0.59964 -0.04075  0.47551  2.95561 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               339.289933  91.849462   3.694 0.000254 ***
currentDF[, TRAIT]          0.138783   0.047865   2.899 0.003957 ** 
Age                         0.003679   0.005926   0.621 0.535045    
Gendermale                  0.273430   0.101774   2.687 0.007538 ** 
ORdate_year                -0.169320   0.045823  -3.695 0.000252 ***
Hypertension.compositeyes  -0.047009   0.139031  -0.338 0.735460    
DiabetesStatusDiabetes      0.133514   0.117326   1.138 0.255855    
SmokerStatusEx-smoker      -0.084940   0.103684  -0.819 0.413184    
SmokerStatusNever smoked    0.037356   0.159790   0.234 0.815280    
Med.Statin.LLDyes          -0.175236   0.107771  -1.626 0.104786    
Med.all.antiplateletyes    -0.204007   0.163981  -1.244 0.214242    
GFR_MDRD                   -0.002214   0.002635  -0.840 0.401198    
BMI                        -0.016811   0.012687  -1.325 0.185943    
MedHx_CVDyes                0.057699   0.097157   0.594 0.552957    
stenose50-70%              -0.334540   0.694012  -0.482 0.630060    
stenose70-90%               0.188147   0.652329   0.288 0.773182    
stenose90-99%               0.039120   0.650224   0.060 0.952057    
stenose100% (Occlusion)    -0.709359   0.805817  -0.880 0.379260    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9045 on 376 degrees of freedom
Multiple R-squared:  0.1296,    Adjusted R-squared:  0.09028 
F-statistic: 3.294 on 17 and 376 DF,  p-value: 1.314e-05

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' sICAM1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: sICAM1_rank 
Effect size...............: 0.138783 
Standard error............: 0.047865 
Odds ratio (effect size)..: 1.149 
Lower 95% CI..............: 1.046 
Upper 95% CI..............: 1.262 
T-value...................: 2.899477 
P-value...................: 0.003957249 
R^2.......................: 0.129635 
Adjusted r^2..............: 0.090284 
Sample size of AE DB......: 2423 
Sample size of model......: 394 
Missing data %............: 83.73917 

- processing VEGFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.all.antiplatelet + GFR_MDRD + BMI + stenose, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year  Med.all.antiplateletyes                 GFR_MDRD  
              605.44365                  0.21623                  0.27216                 -0.30240                 -0.27935                 -0.00511  
                    BMI            stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.02159                  0.80800                  1.23457                  1.03777                  0.19344  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.6355 -0.5328 -0.1320  0.4369  2.7713 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               603.371833 102.046952   5.913 8.83e-09 ***
currentDF[, TRAIT]          0.204483   0.049258   4.151 4.27e-05 ***
Age                         0.001610   0.006012   0.268   0.7890    
Gendermale                  0.298705   0.104647   2.854   0.0046 ** 
ORdate_year                -0.301318   0.050931  -5.916 8.66e-09 ***
Hypertension.compositeyes  -0.163890   0.145500  -1.126   0.2609    
DiabetesStatusDiabetes     -0.013334   0.117617  -0.113   0.9098    
SmokerStatusEx-smoker      -0.087816   0.105082  -0.836   0.4040    
SmokerStatusNever smoked    0.158093   0.167713   0.943   0.3466    
Med.Statin.LLDyes          -0.072908   0.108889  -0.670   0.5036    
Med.all.antiplateletyes    -0.263286   0.158782  -1.658   0.0983 .  
GFR_MDRD                   -0.005346   0.002544  -2.102   0.0364 *  
BMI                        -0.020340   0.013165  -1.545   0.1233    
MedHx_CVDyes                0.050893   0.099678   0.511   0.6100    
stenose50-70%               0.735314   0.889422   0.827   0.4090    
stenose70-90%               1.178954   0.852140   1.384   0.1675    
stenose90-99%               0.965463   0.850819   1.135   0.2574    
stenose100% (Occlusion)     0.087200   0.959619   0.091   0.9277    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8426 on 312 degrees of freedom
Multiple R-squared:  0.2061,    Adjusted R-squared:  0.1628 
F-statistic: 4.764 on 17 and 312 DF,  p-value: 4.949e-09

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' VEGFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: VEGFA_rank 
Effect size...............: 0.204483 
Standard error............: 0.049258 
Odds ratio (effect size)..: 1.227 
Lower 95% CI..............: 1.114 
Upper 95% CI..............: 1.351 
T-value...................: 4.151285 
P-value...................: 4.270246e-05 
R^2.......................: 0.206079 
Adjusted r^2..............: 0.162821 
Sample size of AE DB......: 2423 
Sample size of model......: 330 
Missing data %............: 86.38052 

- processing TGFB_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year + GFR_MDRD, 
    data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year     GFR_MDRD  
 422.567714     0.245472    -0.211023    -0.004055  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.75331 -0.60293 -0.06849  0.46663  3.03503 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               397.931460  94.466998   4.212 3.19e-05 ***
currentDF[, TRAIT]          0.060049   0.048611   1.235   0.2175    
Age                         0.000681   0.006075   0.112   0.9108    
Gendermale                  0.271881   0.105766   2.571   0.0105 *  
ORdate_year                -0.198487   0.047134  -4.211 3.20e-05 ***
Hypertension.compositeyes  -0.074295   0.142203  -0.522   0.6017    
DiabetesStatusDiabetes      0.108392   0.119629   0.906   0.3655    
SmokerStatusEx-smoker      -0.077703   0.106553  -0.729   0.4663    
SmokerStatusNever smoked    0.143648   0.165490   0.868   0.3860    
Med.Statin.LLDyes          -0.159324   0.110967  -1.436   0.1519    
Med.all.antiplateletyes    -0.189435   0.169337  -1.119   0.2640    
GFR_MDRD                   -0.003119   0.002710  -1.151   0.2506    
BMI                        -0.015967   0.013179  -1.212   0.2265    
MedHx_CVDyes                0.077823   0.099817   0.780   0.4361    
stenose50-70%              -0.325158   0.703195  -0.462   0.6441    
stenose70-90%               0.216771   0.663164   0.327   0.7439    
stenose90-99%               0.091778   0.660753   0.139   0.8896    
stenose100% (Occlusion)    -0.813254   0.819977  -0.992   0.3219    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.919 on 366 degrees of freedom
Multiple R-squared:  0.1153,    Adjusted R-squared:  0.07423 
F-statistic: 2.806 on 17 and 366 DF,  p-value: 0.000188

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' TGFB_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: TGFB_rank 
Effect size...............: 0.060049 
Standard error............: 0.048611 
Odds ratio (effect size)..: 1.062 
Lower 95% CI..............: 0.965 
Upper 95% CI..............: 1.168 
T-value...................: 1.235294 
P-value...................: 0.2175134 
R^2.......................: 0.11532 
Adjusted r^2..............: 0.074228 
Sample size of AE DB......: 2423 
Sample size of model......: 384 
Missing data %............: 84.15188 

- processing MMP2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + GFR_MDRD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes            GFR_MDRD  
        488.244559            0.075016            0.316277           -0.243790           -0.160502           -0.003945  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8689 -0.5762 -0.0745  0.4982  3.2666 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.951e+02  9.547e+01   5.186 3.54e-07 ***
currentDF[, TRAIT]         6.707e-02  5.122e-02   1.309  0.19125    
Age                       -8.326e-04  5.900e-03  -0.141  0.88785    
Gendermale                 3.346e-01  1.030e-01   3.250  0.00126 ** 
ORdate_year               -2.469e-01  4.763e-02  -5.185 3.57e-07 ***
Hypertension.compositeyes -4.015e-02  1.437e-01  -0.279  0.78010    
DiabetesStatusDiabetes     5.294e-02  1.166e-01   0.454  0.65017    
SmokerStatusEx-smoker     -8.013e-02  1.043e-01  -0.768  0.44288    
SmokerStatusNever smoked   1.326e-01  1.611e-01   0.823  0.41093    
Med.Statin.LLDyes         -1.705e-01  1.071e-01  -1.592  0.11228    
Med.all.antiplateletyes   -2.210e-01  1.689e-01  -1.309  0.19140    
GFR_MDRD                  -3.499e-03  2.617e-03  -1.337  0.18207    
BMI                       -1.624e-02  1.301e-02  -1.248  0.21285    
MedHx_CVDyes               8.124e-02  9.803e-02   0.829  0.40776    
stenose50-70%             -2.629e-01  6.925e-01  -0.380  0.70438    
stenose70-90%              1.794e-01  6.541e-01   0.274  0.78401    
stenose90-99%              6.799e-02  6.515e-01   0.104  0.91695    
stenose100% (Occlusion)   -8.184e-01  8.078e-01  -1.013  0.31168    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9055 on 371 degrees of freedom
Multiple R-squared:  0.1412,    Adjusted R-squared:  0.1018 
F-statistic: 3.588 on 17 and 371 DF,  p-value: 2.607e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP2_rank 
Effect size...............: 0.067066 
Standard error............: 0.051224 
Odds ratio (effect size)..: 1.069 
Lower 95% CI..............: 0.967 
Upper 95% CI..............: 1.182 
T-value...................: 1.309275 
P-value...................: 0.1912516 
R^2.......................: 0.141198 
Adjusted r^2..............: 0.101845 
Sample size of AE DB......: 2423 
Sample size of model......: 389 
Missing data %............: 83.94552 

- processing MMP8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + BMI + stenose, data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes                      BMI  
              518.11414                  0.22361                  0.20944                 -0.25837                 -0.16145                 -0.02197  
          stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.68467                 -0.21566                 -0.27056                 -1.16796  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.06404 -0.54875 -0.05214  0.45277  3.05284 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               528.162165  92.488230   5.711 2.31e-08 ***
currentDF[, TRAIT]          0.217754   0.048550   4.485 9.73e-06 ***
Age                        -0.001146   0.005728  -0.200   0.8415    
Gendermale                  0.232349   0.102014   2.278   0.0233 *  
ORdate_year                -0.263143   0.046144  -5.703 2.41e-08 ***
Hypertension.compositeyes  -0.101608   0.138007  -0.736   0.4620    
DiabetesStatusDiabetes      0.101299   0.114406   0.885   0.3765    
SmokerStatusEx-smoker      -0.039920   0.101825  -0.392   0.6952    
SmokerStatusNever smoked    0.189772   0.156136   1.215   0.2250    
Med.Statin.LLDyes          -0.156760   0.104590  -1.499   0.1348    
Med.all.antiplateletyes    -0.155969   0.164814  -0.946   0.3446    
GFR_MDRD                   -0.002493   0.002562  -0.973   0.3313    
BMI                        -0.024847   0.012805  -1.940   0.0531 .  
MedHx_CVDyes                0.076311   0.095565   0.799   0.4251    
stenose50-70%              -0.663006   0.680455  -0.974   0.3305    
stenose70-90%              -0.237089   0.644417  -0.368   0.7131    
stenose90-99%              -0.290772   0.640210  -0.454   0.6500    
stenose100% (Occlusion)    -1.290942   0.795104  -1.624   0.1053    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8839 on 371 degrees of freedom
Multiple R-squared:  0.1816,    Adjusted R-squared:  0.1441 
F-statistic: 4.843 on 17 and 371 DF,  p-value: 2.095e-09

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP8_rank 
Effect size...............: 0.217754 
Standard error............: 0.04855 
Odds ratio (effect size)..: 1.243 
Lower 95% CI..............: 1.13 
Upper 95% CI..............: 1.367 
T-value...................: 4.485114 
P-value...................: 9.730762e-06 
R^2.......................: 0.181604 
Adjusted r^2..............: 0.144104 
Sample size of AE DB......: 2423 
Sample size of model......: 389 
Missing data %............: 83.94552 

- processing MMP9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD + Med.all.antiplatelet + BMI + 
    stenose, data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
              484.54051                  0.12798                  0.25522                 -0.24170                 -0.16630                 -0.23587  
                    BMI            stenose50-70%            stenose70-90%            stenose90-99%  stenose100% (Occlusion)  
               -0.01882                 -0.37517                  0.08306                 -0.01948                 -0.95485  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.92719 -0.56131 -0.06458  0.43887  3.07875 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               485.689729  94.610884   5.134  4.6e-07 ***
currentDF[, TRAIT]          0.119163   0.046927   2.539  0.01151 *  
Age                        -0.001413   0.005830  -0.242  0.80859    
Gendermale                  0.287381   0.102738   2.797  0.00542 ** 
ORdate_year                -0.242140   0.047207  -5.129  4.7e-07 ***
Hypertension.compositeyes  -0.049814   0.140702  -0.354  0.72351    
DiabetesStatusDiabetes      0.074169   0.116263   0.638  0.52391    
SmokerStatusEx-smoker      -0.060501   0.103495  -0.585  0.55919    
SmokerStatusNever smoked    0.147501   0.158853   0.929  0.35373    
Med.Statin.LLDyes          -0.174343   0.106397  -1.639  0.10214    
Med.all.antiplateletyes    -0.207719   0.167400  -1.241  0.21544    
GFR_MDRD                   -0.002866   0.002617  -1.095  0.27418    
BMI                        -0.020951   0.013005  -1.611  0.10803    
MedHx_CVDyes                0.088529   0.097239   0.910  0.36319    
stenose50-70%              -0.322255   0.687739  -0.469  0.63965    
stenose70-90%               0.113538   0.650027   0.175  0.86144    
stenose90-99%              -0.002686   0.647492  -0.004  0.99669    
stenose100% (Occlusion)    -0.905485   0.803171  -1.127  0.26031    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8998 on 371 degrees of freedom
Multiple R-squared:  0.152, Adjusted R-squared:  0.1131 
F-statistic: 3.911 on 17 and 371 DF,  p-value: 4.25e-07

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_pg_ml_2015_rank ' with ' MMP9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_pg_ml_2015_rank 
Trait/outcome.............: MMP9_rank 
Effect size...............: 0.119163 
Standard error............: 0.046927 
Odds ratio (effect size)..: 1.127 
Lower 95% CI..............: 1.028 
Upper 95% CI..............: 1.235 
T-value...................: 2.539309 
P-value...................: 0.01151472 
R^2.......................: 0.151969 
Adjusted r^2..............: 0.11311 
Sample size of AE DB......: 2423 
Sample size of model......: 389 
Missing data %............: 83.94552 

Analysis of MCP1_rank.

- processing IL2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
         337.77686            -0.07302             0.22973            -0.16864  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3564 -0.6994 -0.0096  0.6442  2.3502 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               324.135124 114.029542   2.843  0.00473 **
currentDF[, TRAIT]         -0.091842   0.052701  -1.743  0.08225 . 
Age                        -0.010907   0.006841  -1.594  0.11173   
Gendermale                  0.280439   0.121542   2.307  0.02161 * 
ORdate_year                -0.161011   0.056903  -2.830  0.00493 **
Hypertension.compositeyes  -0.222927   0.155898  -1.430  0.15361   
DiabetesStatusDiabetes     -0.112047   0.138121  -0.811  0.41778   
SmokerStatusEx-smoker       0.057259   0.119725   0.478  0.63276   
SmokerStatusNever smoked    0.369203   0.179991   2.051  0.04098 * 
Med.Statin.LLDyes          -0.168555   0.119333  -1.412  0.15869   
Med.all.antiplateletyes     0.234563   0.205958   1.139  0.25552   
GFR_MDRD                   -0.002512   0.003084  -0.815  0.41586   
BMI                        -0.007833   0.015379  -0.509  0.61084   
MedHx_CVDyes                0.042501   0.110771   0.384  0.70144   
stenose50-70%              -0.622075   0.779274  -0.798  0.42525   
stenose70-90%              -0.509955   0.717059  -0.711  0.47744   
stenose90-99%              -0.556706   0.715558  -0.778  0.43709   
stenose100% (Occlusion)    -0.781108   0.887784  -0.880  0.37954   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9891 on 354 degrees of freedom
Multiple R-squared:  0.06962,   Adjusted R-squared:  0.02494 
F-statistic: 1.558 on 17 and 354 DF,  p-value: 0.073

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL2_rank 
Effect size...............: -0.091842 
Standard error............: 0.052701 
Odds ratio (effect size)..: 0.912 
Lower 95% CI..............: 0.823 
Upper 95% CI..............: 1.012 
T-value...................: -1.742702 
P-value...................: 0.08225396 
R^2.......................: 0.069619 
Adjusted r^2..............: 0.02494 
Sample size of AE DB......: 2423 
Sample size of model......: 372 
Missing data %............: 84.64713 

- processing IL4_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   391.3396       0.3126      -0.1954  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3067 -0.7046  0.0354  0.6417  2.5773 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               366.184851 124.633598   2.938  0.00354 **
currentDF[, TRAIT]         -0.050504   0.056698  -0.891  0.37371   
Age                        -0.013894   0.007279  -1.909  0.05715 . 
Gendermale                  0.354830   0.129438   2.741  0.00646 **
ORdate_year                -0.182242   0.062216  -2.929  0.00364 **
Hypertension.compositeyes  -0.112361   0.165304  -0.680  0.49716   
DiabetesStatusDiabetes     -0.118886   0.145318  -0.818  0.41389   
SmokerStatusEx-smoker       0.089026   0.124760   0.714  0.47600   
SmokerStatusNever smoked    0.341531   0.190332   1.794  0.07368 . 
Med.Statin.LLDyes          -0.156028   0.126548  -1.233  0.21848   
Med.all.antiplateletyes     0.158071   0.219711   0.719  0.47238   
GFR_MDRD                   -0.003372   0.003474  -0.971  0.33234   
BMI                        -0.003079   0.016501  -0.187  0.85209   
MedHx_CVDyes                0.061412   0.117000   0.525  0.60002   
stenose50-70%              -0.093615   1.077451  -0.087  0.93082   
stenose70-90%              -0.040576   1.030674  -0.039  0.96862   
stenose90-99%              -0.058983   1.027499  -0.057  0.95426   
stenose100% (Occlusion)    -0.257200   1.161929  -0.221  0.82495   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.001 on 325 degrees of freedom
Multiple R-squared:  0.07236,   Adjusted R-squared:  0.02384 
F-statistic: 1.491 on 17 and 325 DF,  p-value: 0.09541

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL4_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL4_rank 
Effect size...............: -0.050504 
Standard error............: 0.056698 
Odds ratio (effect size)..: 0.951 
Lower 95% CI..............: 0.851 
Upper 95% CI..............: 1.062 
T-value...................: -0.89077 
P-value...................: 0.3737117 
R^2.......................: 0.072361 
Adjusted r^2..............: 0.023838 
Sample size of AE DB......: 2423 
Sample size of model......: 343 
Missing data %............: 85.844 

- processing IL5_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year   Med.Statin.LLDyes  
         348.44629            -0.11317            -0.01065             0.29540            -0.17354            -0.21941  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5069 -0.7021  0.0220  0.6314  2.2770 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               346.815626 117.537234   2.951  0.00339 **
currentDF[, TRAIT]         -0.116354   0.053150  -2.189  0.02925 * 
Age                        -0.015717   0.006997  -2.246  0.02532 * 
Gendermale                  0.344607   0.121863   2.828  0.00496 **
ORdate_year                -0.172428   0.058668  -2.939  0.00351 **
Hypertension.compositeyes  -0.111181   0.155967  -0.713  0.47642   
DiabetesStatusDiabetes     -0.141743   0.140027  -1.012  0.31213   
SmokerStatusEx-smoker       0.073269   0.119671   0.612  0.54077   
SmokerStatusNever smoked    0.313783   0.185013   1.696  0.09078 . 
Med.Statin.LLDyes          -0.235154   0.120323  -1.954  0.05146 . 
Med.all.antiplateletyes     0.160528   0.211803   0.758  0.44902   
GFR_MDRD                   -0.003817   0.003191  -1.196  0.23245   
BMI                        -0.004306   0.015178  -0.284  0.77683   
MedHx_CVDyes                0.092628   0.111450   0.831  0.40648   
stenose50-70%              -0.046230   1.060366  -0.044  0.96525   
stenose70-90%              -0.051028   1.012527  -0.050  0.95983   
stenose90-99%              -0.077836   1.010546  -0.077  0.93865   
stenose100% (Occlusion)    -0.339590   1.141656  -0.297  0.76630   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9872 on 346 degrees of freedom
Multiple R-squared:  0.08442,   Adjusted R-squared:  0.03944 
F-statistic: 1.877 on 17 and 346 DF,  p-value: 0.01904

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL5_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL5_rank 
Effect size...............: -0.116354 
Standard error............: 0.05315 
Odds ratio (effect size)..: 0.89 
Lower 95% CI..............: 0.802 
Upper 95% CI..............: 0.988 
T-value...................: -2.189154 
P-value...................: 0.02925333 
R^2.......................: 0.084423 
Adjusted r^2..............: 0.039438 
Sample size of AE DB......: 2423 
Sample size of model......: 364 
Missing data %............: 84.9773 

- processing IL6_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   303.5723       0.2429      -0.1516  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1707 -0.6816 -0.0241  0.6683  2.4450 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               292.598955 112.086171   2.610  0.00942 **
currentDF[, TRAIT]          0.051411   0.051375   1.001  0.31764   
Age                        -0.014239   0.007037  -2.023  0.04375 * 
Gendermale                  0.310939   0.121720   2.555  0.01104 * 
ORdate_year                -0.145267   0.055919  -2.598  0.00976 **
Hypertension.compositeyes  -0.143512   0.156731  -0.916  0.36045   
DiabetesStatusDiabetes     -0.081443   0.137404  -0.593  0.55373   
SmokerStatusEx-smoker       0.098193   0.118217   0.831  0.40673   
SmokerStatusNever smoked    0.387337   0.180654   2.144  0.03269 * 
Med.Statin.LLDyes          -0.156889   0.118637  -1.322  0.18685   
Med.all.antiplateletyes     0.157364   0.191973   0.820  0.41291   
GFR_MDRD                   -0.003912   0.003160  -1.238  0.21647   
BMI                        -0.012374   0.014417  -0.858  0.39130   
MedHx_CVDyes                0.029785   0.109981   0.271  0.78669   
stenose50-70%              -0.238627   0.655442  -0.364  0.71602   
stenose70-90%              -0.088126   0.597638  -0.147  0.88285   
stenose90-99%              -0.162556   0.595502  -0.273  0.78503   
stenose100% (Occlusion)    -0.411221   0.797116  -0.516  0.60625   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.001 on 364 degrees of freedom
Multiple R-squared:  0.06287,   Adjusted R-squared:  0.01911 
F-statistic: 1.437 on 17 and 364 DF,  p-value: 0.1162

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL6_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL6_rank 
Effect size...............: 0.051411 
Standard error............: 0.051375 
Odds ratio (effect size)..: 1.053 
Lower 95% CI..............: 0.952 
Upper 95% CI..............: 1.164 
T-value...................: 1.00069 
P-value...................: 0.3176413 
R^2.......................: 0.062873 
Adjusted r^2..............: 0.019106 
Sample size of AE DB......: 2423 
Sample size of model......: 382 
Missing data %............: 84.23442 

- processing IL8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + SmokerStatus + 
    Med.all.antiplatelet + GFR_MDRD + BMI, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                        Age                 Gendermale                ORdate_year  Hypertension.compositeyes  
               483.713537                   0.324434                  -0.018361                   0.307909                  -0.240502                  -0.266232  
    SmokerStatusEx-smoker   SmokerStatusNever smoked    Med.all.antiplateletyes                   GFR_MDRD                        BMI  
                 0.103620                   0.407957                   0.324185                  -0.004823                  -0.020470  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2578 -0.6013 -0.0235  0.5901  2.3891 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               468.385552 104.233897   4.494 9.53e-06 ***
currentDF[, TRAIT]          0.323207   0.051592   6.265 1.10e-09 ***
Age                        -0.018659   0.006544  -2.851  0.00461 ** 
Gendermale                  0.316040   0.113877   2.775  0.00581 ** 
ORdate_year                -0.232817   0.052003  -4.477 1.03e-05 ***
Hypertension.compositeyes  -0.225756   0.148680  -1.518  0.12981    
DiabetesStatusDiabetes     -0.160255   0.129844  -1.234  0.21795    
SmokerStatusEx-smoker       0.106100   0.110630   0.959  0.33819    
SmokerStatusNever smoked    0.427245   0.175653   2.432  0.01550 *  
Med.Statin.LLDyes          -0.099350   0.110753  -0.897  0.37032    
Med.all.antiplateletyes     0.292253   0.175618   1.664  0.09698 .  
GFR_MDRD                   -0.004916   0.002823  -1.741  0.08249 .  
BMI                        -0.018124   0.013438  -1.349  0.17831    
MedHx_CVDyes                0.024877   0.104174   0.239  0.81140    
stenose50-70%              -0.056165   0.616116  -0.091  0.92742    
stenose70-90%               0.029985   0.554347   0.054  0.95689    
stenose90-99%              -0.066973   0.553139  -0.121  0.90370    
stenose100% (Occlusion)    -0.730295   0.726805  -1.005  0.31569    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9299 on 350 degrees of freedom
Multiple R-squared:  0.192, Adjusted R-squared:  0.1528 
F-statistic: 4.893 on 17 and 350 DF,  p-value: 1.81e-09

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL8_rank 
Effect size...............: 0.323207 
Standard error............: 0.051592 
Odds ratio (effect size)..: 1.382 
Lower 95% CI..............: 1.249 
Upper 95% CI..............: 1.529 
T-value...................: 6.264673 
P-value...................: 1.09668e-09 
R^2.......................: 0.192008 
Adjusted r^2..............: 0.152763 
Sample size of AE DB......: 2423 
Sample size of model......: 368 
Missing data %............: 84.81222 

- processing IL9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes  
          469.1433              0.2651              0.2845             -0.2341             -0.1561  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.97853 -0.64237 -0.04494  0.58360  2.41010 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               450.887553  78.695200   5.730 1.90e-08 ***
currentDF[, TRAIT]          0.256934   0.042621   6.028 3.57e-09 ***
Age                        -0.008089   0.005645  -1.433  0.15261    
Gendermale                  0.306162   0.097611   3.137  0.00183 ** 
ORdate_year                -0.224472   0.039276  -5.715 2.05e-08 ***
Hypertension.compositeyes  -0.142938   0.130384  -1.096  0.27357    
DiabetesStatusDiabetes     -0.116201   0.111687  -1.040  0.29873    
SmokerStatusEx-smoker       0.036425   0.097594   0.373  0.70916    
SmokerStatusNever smoked    0.143082   0.141142   1.014  0.31128    
Med.Statin.LLDyes          -0.167205   0.101227  -1.652  0.09931 .  
Med.all.antiplateletyes     0.053742   0.158187   0.340  0.73422    
GFR_MDRD                   -0.001307   0.002394  -0.546  0.58537    
BMI                        -0.009911   0.011498  -0.862  0.38918    
MedHx_CVDyes                0.040135   0.091466   0.439  0.66103    
stenose50-70%              -0.392710   0.574523  -0.684  0.49463    
stenose70-90%              -0.173669   0.530032  -0.328  0.74333    
stenose90-99%              -0.172148   0.528067  -0.326  0.74459    
stenose100% (Occlusion)    -0.930035   0.670103  -1.388  0.16589    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8952 on 430 degrees of freedom
Multiple R-squared:  0.1963,    Adjusted R-squared:  0.1645 
F-statistic: 6.178 on 17 and 430 DF,  p-value: 5.855e-13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL9_rank 
Effect size...............: 0.256934 
Standard error............: 0.042621 
Odds ratio (effect size)..: 1.293 
Lower 95% CI..............: 1.189 
Upper 95% CI..............: 1.406 
T-value...................: 6.028403 
P-value...................: 3.566497e-09 
R^2.......................: 0.196293 
Adjusted r^2..............: 0.164519 
Sample size of AE DB......: 2423 
Sample size of model......: 448 
Missing data %............: 81.51052 

- processing IL10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year   Med.Statin.LLDyes  
         377.35088            -0.13938            -0.01222             0.31984            -0.18793            -0.25406  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4252 -0.7168 -0.0178  0.6097  2.3442 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               382.837732 133.005231   2.878  0.00428 **
currentDF[, TRAIT]         -0.148079   0.059120  -2.505  0.01277 * 
Age                        -0.018197   0.007506  -2.424  0.01591 * 
Gendermale                  0.381495   0.132668   2.876  0.00432 **
ORdate_year                -0.190096   0.066363  -2.864  0.00446 **
Hypertension.compositeyes  -0.163857   0.174140  -0.941  0.34747   
DiabetesStatusDiabetes     -0.056989   0.150146  -0.380  0.70454   
SmokerStatusEx-smoker       0.062815   0.129141   0.486  0.62702   
SmokerStatusNever smoked    0.343998   0.194722   1.767  0.07829 . 
Med.Statin.LLDyes          -0.270007   0.129064  -2.092  0.03726 * 
Med.all.antiplateletyes     0.085201   0.235966   0.361  0.71829   
GFR_MDRD                   -0.004142   0.003542  -1.169  0.24312   
BMI                        -0.011549   0.016701  -0.692  0.48974   
MedHx_CVDyes                0.045507   0.122897   0.370  0.71142   
stenose50-70%              -0.349383   1.088293  -0.321  0.74840   
stenose70-90%              -0.193352   1.034790  -0.187  0.85190   
stenose90-99%              -0.199793   1.032638  -0.193  0.84671   
stenose100% (Occlusion)    -0.839284   1.225427  -0.685  0.49393   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.003 on 307 degrees of freedom
Multiple R-squared:  0.09275,   Adjusted R-squared:  0.04251 
F-statistic: 1.846 on 17 and 307 DF,  p-value: 0.02231

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL10_rank 
Effect size...............: -0.148079 
Standard error............: 0.05912 
Odds ratio (effect size)..: 0.862 
Lower 95% CI..............: 0.768 
Upper 95% CI..............: 0.968 
T-value...................: -2.504723 
P-value...................: 0.01277281 
R^2.......................: 0.09275 
Adjusted r^2..............: 0.042511 
Sample size of AE DB......: 2423 
Sample size of model......: 325 
Missing data %............: 86.58688 

- processing IL12_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]                 Age          Gendermale         ORdate_year   Med.Statin.LLDyes  
        369.441292           -0.125855           -0.009407            0.319861           -0.184087           -0.206542  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5441 -0.6935 -0.0074  0.6107  2.4391 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               365.217756 125.908830   2.901  0.00398 **
currentDF[, TRAIT]         -0.129343   0.056270  -2.299  0.02216 * 
Age                        -0.014677   0.007287  -2.014  0.04483 * 
Gendermale                  0.380569   0.126539   3.008  0.00284 **
ORdate_year                -0.181562   0.062824  -2.890  0.00411 **
Hypertension.compositeyes  -0.113279   0.165456  -0.685  0.49405   
DiabetesStatusDiabetes     -0.050993   0.142719  -0.357  0.72110   
SmokerStatusEx-smoker       0.029611   0.126046   0.235  0.81441   
SmokerStatusNever smoked    0.325595   0.186266   1.748  0.08141 . 
Med.Statin.LLDyes          -0.217762   0.126329  -1.724  0.08570 . 
Med.all.antiplateletyes     0.175223   0.214845   0.816  0.41534   
GFR_MDRD                   -0.004207   0.003391  -1.241  0.21561   
BMI                        -0.009384   0.016360  -0.574  0.56665   
MedHx_CVDyes                0.065882   0.116576   0.565  0.57237   
stenose50-70%              -0.180538   1.066122  -0.169  0.86563   
stenose70-90%              -0.099681   1.019576  -0.098  0.92218   
stenose90-99%              -0.140547   1.016673  -0.138  0.89013   
stenose100% (Occlusion)    -0.503419   1.179534  -0.427  0.66981   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9904 on 325 degrees of freedom
Multiple R-squared:  0.08593,   Adjusted R-squared:  0.03812 
F-statistic: 1.797 on 17 and 325 DF,  p-value: 0.02731

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL12_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL12_rank 
Effect size...............: -0.129343 
Standard error............: 0.05627 
Odds ratio (effect size)..: 0.879 
Lower 95% CI..............: 0.787 
Upper 95% CI..............: 0.981 
T-value...................: -2.298604 
P-value...................: 0.02216168 
R^2.......................: 0.085935 
Adjusted r^2..............: 0.038122 
Sample size of AE DB......: 2423 
Sample size of model......: 343 
Missing data %............: 85.844 

- processing IL13_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + Med.Statin.LLD, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes          Med.Statin.LLDyes  
                 481.9463                     0.3897                     0.2204                    -0.2405                    -0.1661                    -0.1353  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.6353 -0.6508 -0.0352  0.6057  2.4524 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.810e+02  7.720e+01   6.230 1.02e-09 ***
currentDF[, TRAIT]         3.825e-01  4.102e-02   9.324  < 2e-16 ***
Age                       -2.655e-03  5.378e-03  -0.494   0.6217    
Gendermale                 2.295e-01  9.296e-02   2.468   0.0139 *  
ORdate_year               -2.396e-01  3.853e-02  -6.219 1.09e-09 ***
Hypertension.compositeyes -1.494e-01  1.220e-01  -1.224   0.2214    
DiabetesStatusDiabetes    -6.109e-02  1.038e-01  -0.589   0.5563    
SmokerStatusEx-smoker      1.574e-02  9.221e-02   0.171   0.8645    
SmokerStatusNever smoked   1.052e-01  1.373e-01   0.766   0.4440    
Med.Statin.LLDyes         -1.519e-01  9.556e-02  -1.589   0.1127    
Med.all.antiplateletyes    3.047e-02  1.470e-01   0.207   0.8358    
GFR_MDRD                   4.795e-04  2.297e-03   0.209   0.8347    
BMI                       -1.179e-02  1.097e-02  -1.074   0.2832    
MedHx_CVDyes               2.197e-02  8.629e-02   0.255   0.7991    
stenose50-70%             -4.282e-01  5.707e-01  -0.750   0.4535    
stenose70-90%             -2.634e-01  5.303e-01  -0.497   0.6197    
stenose90-99%             -3.147e-01  5.287e-01  -0.595   0.5520    
stenose100% (Occlusion)   -9.036e-01  6.705e-01  -1.348   0.1784    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8978 on 479 degrees of freedom
Multiple R-squared:  0.2369,    Adjusted R-squared:  0.2098 
F-statistic: 8.748 on 17 and 479 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL13_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL13_rank 
Effect size...............: 0.382482 
Standard error............: 0.04102 
Odds ratio (effect size)..: 1.466 
Lower 95% CI..............: 1.353 
Upper 95% CI..............: 1.589 
T-value...................: 9.324199 
P-value...................: 4.12287e-19 
R^2.......................: 0.236913 
Adjusted r^2..............: 0.20983 
Sample size of AE DB......: 2423 
Sample size of model......: 497 
Missing data %............: 79.48824 

- processing IL21_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 471.7857                     0.3464                     0.2211                    -0.2354                    -0.2092  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5725 -0.6842 -0.0106  0.6285  2.2829 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.536e+02  7.884e+01   5.753 1.56e-08 ***
currentDF[, TRAIT]         3.404e-01  4.205e-02   8.095 4.74e-15 ***
Age                       -4.645e-03  5.483e-03  -0.847   0.3973    
Gendermale                 2.308e-01  9.504e-02   2.428   0.0155 *  
ORdate_year               -2.258e-01  3.934e-02  -5.740 1.68e-08 ***
Hypertension.compositeyes -1.792e-01  1.247e-01  -1.437   0.1514    
DiabetesStatusDiabetes    -7.635e-02  1.061e-01  -0.719   0.4723    
SmokerStatusEx-smoker      2.884e-02  9.419e-02   0.306   0.7596    
SmokerStatusNever smoked   1.377e-01  1.403e-01   0.982   0.3268    
Med.Statin.LLDyes         -1.409e-01  9.767e-02  -1.443   0.1498    
Med.all.antiplateletyes    2.802e-02  1.505e-01   0.186   0.8524    
GFR_MDRD                   3.006e-04  2.350e-03   0.128   0.8983    
BMI                       -1.342e-02  1.123e-02  -1.195   0.2326    
MedHx_CVDyes               3.006e-02  8.811e-02   0.341   0.7332    
stenose50-70%             -4.718e-01  5.840e-01  -0.808   0.4196    
stenose70-90%             -2.817e-01  5.427e-01  -0.519   0.6039    
stenose90-99%             -3.361e-01  5.411e-01  -0.621   0.5348    
stenose100% (Occlusion)   -1.029e+00  6.860e-01  -1.500   0.1342    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9188 on 480 degrees of freedom
Multiple R-squared:  0.2063,    Adjusted R-squared:  0.1782 
F-statistic:  7.34 on 17 and 480 DF,  p-value: 3.891e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IL21_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IL21_rank 
Effect size...............: 0.340369 
Standard error............: 0.042046 
Odds ratio (effect size)..: 1.405 
Lower 95% CI..............: 1.294 
Upper 95% CI..............: 1.526 
T-value...................: 8.095211 
P-value...................: 4.740966e-15 
R^2.......................: 0.206317 
Adjusted r^2..............: 0.178208 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing INFG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Gender + ORdate_year, data = currentDF)

Coefficients:
(Intercept)   Gendermale  ORdate_year  
   430.2780       0.3651      -0.2149  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3229 -0.6695  0.0116  0.6628  2.7270 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               483.732484 119.272545   4.056 6.17e-05 ***
currentDF[, TRAIT]         -0.108540   0.057053  -1.902  0.05794 .  
Age                        -0.012458   0.006953  -1.792  0.07403 .  
Gendermale                  0.369763   0.122970   3.007  0.00283 ** 
ORdate_year                -0.240763   0.059497  -4.047 6.40e-05 ***
Hypertension.compositeyes  -0.021201   0.159718  -0.133  0.89448    
DiabetesStatusDiabetes     -0.039525   0.135510  -0.292  0.77071    
SmokerStatusEx-smoker       0.145721   0.119575   1.219  0.22380    
SmokerStatusNever smoked    0.359357   0.181365   1.981  0.04833 *  
Med.Statin.LLDyes          -0.189488   0.122301  -1.549  0.12220    
Med.all.antiplateletyes     0.108570   0.194470   0.558  0.57701    
GFR_MDRD                   -0.001517   0.003074  -0.493  0.62206    
BMI                        -0.018579   0.014625  -1.270  0.20480    
MedHx_CVDyes                0.071023   0.113512   0.626  0.53193    
stenose50-70%              -0.045968   0.668659  -0.069  0.94523    
stenose70-90%              -0.253970   0.593765  -0.428  0.66911    
stenose90-99%              -0.194770   0.591953  -0.329  0.74233    
stenose100% (Occlusion)    -0.605486   0.835638  -0.725  0.46920    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9935 on 349 degrees of freedom
Multiple R-squared:  0.09256,   Adjusted R-squared:  0.04836 
F-statistic: 2.094 on 17 and 349 DF,  p-value: 0.006979

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' INFG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: INFG_rank 
Effect size...............: -0.10854 
Standard error............: 0.057053 
Odds ratio (effect size)..: 0.897 
Lower 95% CI..............: 0.802 
Upper 95% CI..............: 1.003 
T-value...................: -1.902428 
P-value...................: 0.05793809 
R^2.......................: 0.092565 
Adjusted r^2..............: 0.048363 
Sample size of AE DB......: 2423 
Sample size of model......: 367 
Missing data %............: 84.85349 

- processing TNFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ Age + Gender + ORdate_year + 
    Med.Statin.LLD + Med.all.antiplatelet, data = currentDF)

Coefficients:
            (Intercept)                      Age               Gendermale              ORdate_year        Med.Statin.LLDyes  Med.all.antiplateletyes  
             269.319313                -0.009533                 0.294462                -0.134292                -0.179835                 0.348119  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2611 -0.6760  0.0113  0.6116  2.6236 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)   
(Intercept)               275.964697 125.935591   2.191  0.02915 * 
currentDF[, TRAIT]         -0.002156   0.054993  -0.039  0.96876   
Age                        -0.014792   0.007229  -2.046  0.04156 * 
Gendermale                  0.349140   0.127517   2.738  0.00653 **
ORdate_year                -0.137038   0.062850  -2.180  0.02996 * 
Hypertension.compositeyes  -0.121535   0.166625  -0.729  0.46630   
DiabetesStatusDiabetes     -0.092884   0.144284  -0.644  0.52020   
SmokerStatusEx-smoker       0.053903   0.126442   0.426  0.67017   
SmokerStatusNever smoked    0.407871   0.188700   2.161  0.03140 * 
Med.Statin.LLDyes          -0.199705   0.125586  -1.590  0.11279   
Med.all.antiplateletyes     0.285589   0.224909   1.270  0.20508   
GFR_MDRD                   -0.003156   0.003388  -0.931  0.35238   
BMI                        -0.014823   0.016144  -0.918  0.35921   
MedHx_CVDyes                0.025319   0.119106   0.213  0.83179   
stenose50-70%              -0.197069   1.067862  -0.185  0.85370   
stenose70-90%              -0.069896   1.020871  -0.068  0.94546   
stenose90-99%              -0.130683   1.019824  -0.128  0.89812   
stenose100% (Occlusion)    -0.819097   1.273028  -0.643  0.52041   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9942 on 318 degrees of freedom
Multiple R-squared:  0.07925,   Adjusted R-squared:  0.03003 
F-statistic:  1.61 on 17 and 318 DF,  p-value: 0.06002

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TNFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TNFA_rank 
Effect size...............: -0.002156 
Standard error............: 0.054993 
Odds ratio (effect size)..: 0.998 
Lower 95% CI..............: 0.896 
Upper 95% CI..............: 1.111 
T-value...................: -0.039197 
P-value...................: 0.9687576 
R^2.......................: 0.079251 
Adjusted r^2..............: 0.030029 
Sample size of AE DB......: 2423 
Sample size of model......: 336 
Missing data %............: 86.13289 

- processing MIF_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + SmokerStatus, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes      SmokerStatusEx-smoker  
                164.54415                    0.35958                    0.25142                   -0.08215                   -0.20282                    0.10913  
 SmokerStatusNever smoked  
                  0.27908  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2591 -0.6027 -0.0388  0.6311  2.5878 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               146.080149  87.467299   1.670   0.0955 .  
currentDF[, TRAIT]          0.359164   0.048534   7.400 6.13e-13 ***
Age                        -0.006303   0.005520  -1.142   0.2541    
Gendermale                  0.247108   0.095861   2.578   0.0102 *  
ORdate_year                -0.072430   0.043645  -1.660   0.0977 .  
Hypertension.compositeyes  -0.147063   0.126216  -1.165   0.2445    
DiabetesStatusDiabetes     -0.010037   0.107585  -0.093   0.9257    
SmokerStatusEx-smoker       0.149550   0.095041   1.574   0.1163    
SmokerStatusNever smoked    0.325111   0.140706   2.311   0.0213 *  
Med.Statin.LLDyes          -0.154385   0.098659  -1.565   0.1183    
Med.all.antiplateletyes     0.070551   0.151685   0.465   0.6421    
GFR_MDRD                    0.001645   0.002388   0.689   0.4911    
BMI                        -0.014946   0.011350  -1.317   0.1885    
MedHx_CVDyes                0.020318   0.089007   0.228   0.8195    
stenose50-70%              -0.450650   0.589894  -0.764   0.4453    
stenose70-90%              -0.303103   0.548176  -0.553   0.5806    
stenose90-99%              -0.372707   0.546588  -0.682   0.4956    
stenose100% (Occlusion)    -0.896842   0.693084  -1.294   0.1963    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.928 on 480 degrees of freedom
Multiple R-squared:  0.1903,    Adjusted R-squared:  0.1617 
F-statistic: 6.637 on 17 and 480 DF,  p-value: 2.58e-14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIF_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIF_rank 
Effect size...............: 0.359164 
Standard error............: 0.048534 
Odds ratio (effect size)..: 1.432 
Lower 95% CI..............: 1.302 
Upper 95% CI..............: 1.575 
T-value...................: 7.400196 
P-value...................: 6.131325e-13 
R^2.......................: 0.190333 
Adjusted r^2..............: 0.161658 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing MCP1_rank
attempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsenseattempting model selection on an essentially perfect fit is nonsense

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + GFR_MDRD, 
    data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]            GFR_MDRD  
         1.493e-17           1.000e+00          -2.237e-19  
essentially perfect fit: summary may be unreliable

Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
       Min         1Q     Median         3Q        Max 
-1.527e-16 -2.360e-17 -1.770e-18  1.985e-17  5.427e-16 

Coefficients:
                            Estimate Std. Error    t value Pr(>|t|)    
(Intercept)                1.652e-15  4.889e-15  3.380e-01    0.736    
currentDF[, TRAIT]         1.000e+00  2.594e-18  3.855e+17   <2e-16 ***
Age                        1.184e-19  3.309e-19  3.580e-01    0.721    
Gendermale                 4.281e-18  5.785e-18  7.400e-01    0.460    
ORdate_year               -8.204e-19  2.440e-18 -3.360e-01    0.737    
Hypertension.compositeyes  3.866e-19  7.573e-18  5.100e-02    0.959    
DiabetesStatusDiabetes     3.504e-18  6.434e-18  5.450e-01    0.586    
SmokerStatusEx-smoker     -2.377e-18  5.690e-18 -4.180e-01    0.676    
SmokerStatusNever smoked   2.778e-18  8.465e-18  3.280e-01    0.743    
Med.Statin.LLDyes         -2.396e-18  5.929e-18 -4.040e-01    0.686    
Med.all.antiplateletyes   -2.923e-18  9.092e-18 -3.210e-01    0.748    
GFR_MDRD                  -2.043e-19  1.423e-19 -1.435e+00    0.152    
BMI                        4.747e-19  6.810e-19  6.970e-01    0.486    
MedHx_CVDyes               1.503e-18  5.339e-18  2.820e-01    0.778    
stenose50-70%             -6.687e-18  3.541e-17 -1.890e-01    0.850    
stenose70-90%             -1.188e-17  3.289e-17 -3.610e-01    0.718    
stenose90-99%             -1.032e-17  3.279e-17 -3.150e-01    0.753    
stenose100% (Occlusion)    2.010e-17  4.165e-17  4.830e-01    0.630    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.567e-17 on 480 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 9.691e+33 on 17 and 480 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MCP1_rank ' .
essentially perfect fit: summary may be unreliable
Collecting data.
essentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliableessentially perfect fit: summary may be unreliable
We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MCP1_rank 
Effect size...............: 1 
Standard error............: 0 
Odds ratio (effect size)..: 2.718 
Lower 95% CI..............: 2.718 
Upper 95% CI..............: 2.718 
T-value...................: 3.855073e+17 
P-value...................: 0 
R^2.......................: 1 
Adjusted r^2..............: 1 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing MIP1a_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          515.6169              0.3328              0.2191             -0.2574  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.80412 -0.65997 -0.00457  0.55429  2.56164 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.843e+02  7.641e+01   6.338 5.76e-10 ***
currentDF[, TRAIT]         3.256e-01  4.194e-02   7.763 5.86e-14 ***
Age                       -7.143e-03  5.453e-03  -1.310   0.1909    
Gendermale                 2.425e-01  9.497e-02   2.553   0.0110 *  
ORdate_year               -2.411e-01  3.813e-02  -6.322 6.33e-10 ***
Hypertension.compositeyes -1.164e-01  1.248e-01  -0.933   0.3514    
DiabetesStatusDiabetes    -1.092e-01  1.058e-01  -1.032   0.3027    
SmokerStatusEx-smoker     -5.274e-03  9.435e-02  -0.056   0.9554    
SmokerStatusNever smoked   1.313e-01  1.369e-01   0.959   0.3380    
Med.Statin.LLDyes         -1.391e-01  9.780e-02  -1.422   0.1557    
Med.all.antiplateletyes    6.493e-02  1.529e-01   0.425   0.6712    
GFR_MDRD                   6.714e-05  2.306e-03   0.029   0.9768    
BMI                       -1.295e-02  1.101e-02  -1.176   0.2403    
MedHx_CVDyes               2.487e-02  8.835e-02   0.282   0.7784    
stenose50-70%             -5.187e-01  5.616e-01  -0.924   0.3562    
stenose70-90%             -3.000e-01  5.183e-01  -0.579   0.5630    
stenose90-99%             -3.373e-01  5.164e-01  -0.653   0.5139    
stenose100% (Occlusion)   -1.088e+00  6.555e-01  -1.660   0.0975 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.876 on 441 degrees of freedom
Multiple R-squared:  0.2302,    Adjusted R-squared:  0.2005 
F-statistic: 7.756 on 17 and 441 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIP1a_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIP1a_rank 
Effect size...............: 0.325554 
Standard error............: 0.041939 
Odds ratio (effect size)..: 1.385 
Lower 95% CI..............: 1.276 
Upper 95% CI..............: 1.503 
T-value...................: 7.762627 
P-value...................: 5.85751e-14 
R^2.......................: 0.230177 
Adjusted r^2..............: 0.200501 
Sample size of AE DB......: 2423 
Sample size of model......: 459 
Missing data %............: 81.05654 

- processing RANTES_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 237.9560                     0.3123                     0.2260                    -0.1187                    -0.2196  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.12191 -0.54598 -0.01048  0.59883  2.89938 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                2.159e+02  8.494e+01   2.542   0.0114 *  
currentDF[, TRAIT]         3.202e-01  4.603e-02   6.957 1.16e-11 ***
Age                       -4.036e-03  5.545e-03  -0.728   0.4671    
Gendermale                 2.294e-01  9.619e-02   2.384   0.0175 *  
ORdate_year               -1.072e-01  4.239e-02  -2.529   0.0118 *  
Hypertension.compositeyes -2.207e-01  1.269e-01  -1.739   0.0828 .  
DiabetesStatusDiabetes     1.837e-02  1.079e-01   0.170   0.8649    
SmokerStatusEx-smoker      1.135e-01  9.498e-02   1.195   0.2328    
SmokerStatusNever smoked   2.227e-01  1.406e-01   1.585   0.1137    
Med.Statin.LLDyes         -1.420e-01  9.904e-02  -1.434   0.1522    
Med.all.antiplateletyes    1.265e-01  1.528e-01   0.828   0.4081    
GFR_MDRD                   3.131e-04  2.368e-03   0.132   0.8949    
BMI                       -2.044e-02  1.139e-02  -1.795   0.0734 .  
MedHx_CVDyes               7.841e-03  8.954e-02   0.088   0.9303    
stenose50-70%             -5.181e-01  5.901e-01  -0.878   0.3805    
stenose70-90%             -3.690e-01  5.462e-01  -0.676   0.4996    
stenose90-99%             -3.060e-01  5.443e-01  -0.562   0.5743    
stenose100% (Occlusion)   -1.248e+00  6.909e-01  -1.806   0.0715 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9243 on 474 degrees of freedom
Multiple R-squared:  0.1866,    Adjusted R-squared:  0.1574 
F-statistic: 6.397 on 17 and 474 DF,  p-value: 1.141e-13

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' RANTES_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: RANTES_rank 
Effect size...............: 0.32018 
Standard error............: 0.046025 
Odds ratio (effect size)..: 1.377 
Lower 95% CI..............: 1.259 
Upper 95% CI..............: 1.507 
T-value...................: 6.956614 
P-value...................: 1.163346e-11 
R^2.......................: 0.186607 
Adjusted r^2..............: 0.157435 
Sample size of AE DB......: 2423 
Sample size of model......: 492 
Missing data %............: 79.69459 

- processing MIG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 604.4820                     0.2929                     0.2398                    -0.3016                    -0.2271  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1964 -0.6651  0.0113  0.6225  2.2889 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                5.803e+02  8.343e+01   6.956 1.18e-11 ***
currentDF[, TRAIT]         2.846e-01  4.567e-02   6.233 1.02e-09 ***
Age                       -5.768e-03  5.628e-03  -1.025  0.30592    
Gendermale                 2.556e-01  9.713e-02   2.632  0.00878 ** 
ORdate_year               -2.890e-01  4.164e-02  -6.940 1.30e-11 ***
Hypertension.compositeyes -1.989e-01  1.288e-01  -1.545  0.12313    
DiabetesStatusDiabetes    -4.949e-02  1.089e-01  -0.454  0.64974    
SmokerStatusEx-smoker     -2.714e-03  9.658e-02  -0.028  0.97759    
SmokerStatusNever smoked   1.362e-01  1.448e-01   0.941  0.34726    
Med.Statin.LLDyes         -1.385e-01  1.001e-01  -1.384  0.16690    
Med.all.antiplateletyes    1.729e-02  1.545e-01   0.112  0.91095    
GFR_MDRD                   1.248e-04  2.393e-03   0.052  0.95843    
BMI                       -1.447e-02  1.147e-02  -1.261  0.20803    
MedHx_CVDyes               1.115e-02  9.069e-02   0.123  0.90223    
stenose50-70%             -5.050e-01  5.951e-01  -0.849  0.39651    
stenose70-90%             -3.440e-01  5.507e-01  -0.625  0.53253    
stenose90-99%             -3.337e-01  5.488e-01  -0.608  0.54347    
stenose100% (Occlusion)   -1.148e+00  6.963e-01  -1.649  0.09978 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9319 on 470 degrees of freedom
Multiple R-squared:  0.1734,    Adjusted R-squared:  0.1435 
F-statistic: 5.798 on 17 and 470 DF,  p-value: 4.217e-12

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MIG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MIG_rank 
Effect size...............: 0.28463 
Standard error............: 0.045667 
Odds ratio (effect size)..: 1.329 
Lower 95% CI..............: 1.215 
Upper 95% CI..............: 1.454 
T-value...................: 6.232677 
P-value...................: 1.020771e-09 
R^2.......................: 0.173361 
Adjusted r^2..............: 0.143461 
Sample size of AE DB......: 2423 
Sample size of model......: 488 
Missing data %............: 79.85968 

- processing IP10_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 445.7351                     0.4238                     0.2713                    -0.2224                    -0.1917  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.14418 -0.59601 -0.02638  0.55922  2.18631 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               415.469196  76.990690   5.396 1.13e-07 ***
currentDF[, TRAIT]          0.422204   0.042479   9.939  < 2e-16 ***
Age                        -0.005294   0.005530  -0.957  0.33890    
Gendermale                  0.280567   0.093766   2.992  0.00293 ** 
ORdate_year                -0.206761   0.038418  -5.382 1.22e-07 ***
Hypertension.compositeyes  -0.168565   0.124543  -1.353  0.17662    
DiabetesStatusDiabetes     -0.054183   0.106025  -0.511  0.60958    
SmokerStatusEx-smoker      -0.037196   0.095115  -0.391  0.69594    
SmokerStatusNever smoked    0.009232   0.141886   0.065  0.94815    
Med.Statin.LLDyes          -0.134302   0.097608  -1.376  0.16956    
Med.all.antiplateletyes     0.011772   0.147114   0.080  0.93626    
GFR_MDRD                   -0.001411   0.002340  -0.603  0.54677    
BMI                        -0.016033   0.011120  -1.442  0.15009    
MedHx_CVDyes                0.063694   0.087746   0.726  0.46830    
stenose50-70%              -0.347811   0.554132  -0.628  0.53056    
stenose70-90%              -0.270492   0.513172  -0.527  0.59840    
stenose90-99%              -0.184304   0.510928  -0.361  0.71848    
stenose100% (Occlusion)    -0.741191   0.648898  -1.142  0.25400    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8657 on 428 degrees of freedom
Multiple R-squared:  0.2759,    Adjusted R-squared:  0.2472 
F-statistic: 9.594 on 17 and 428 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' IP10_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: IP10_rank 
Effect size...............: 0.422204 
Standard error............: 0.042479 
Odds ratio (effect size)..: 1.525 
Lower 95% CI..............: 1.403 
Upper 95% CI..............: 1.658 
T-value...................: 9.939162 
P-value...................: 4.407968e-21 
R^2.......................: 0.27592 
Adjusted r^2..............: 0.24716 
Sample size of AE DB......: 2423 
Sample size of model......: 446 
Missing data %............: 81.59307 

- processing Eotaxin1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 513.0539                     0.3244                     0.2028                    -0.2560                    -0.2241  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3999 -0.6942 -0.0328  0.6255  2.3917 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                4.961e+02  8.030e+01   6.178 1.39e-09 ***
currentDF[, TRAIT]         3.182e-01  4.337e-02   7.337 9.40e-13 ***
Age                       -5.803e-03  5.532e-03  -1.049   0.2947    
Gendermale                 2.150e-01  9.642e-02   2.230   0.0262 *  
ORdate_year               -2.470e-01  4.008e-02  -6.164 1.51e-09 ***
Hypertension.compositeyes -1.928e-01  1.261e-01  -1.529   0.1269    
DiabetesStatusDiabetes    -7.730e-02  1.073e-01  -0.720   0.4717    
SmokerStatusEx-smoker      3.090e-02  9.526e-02   0.324   0.7458    
SmokerStatusNever smoked   1.508e-01  1.418e-01   1.063   0.2881    
Med.Statin.LLDyes         -1.261e-01  9.876e-02  -1.276   0.2024    
Med.all.antiplateletyes    2.581e-02  1.523e-01   0.170   0.8655    
GFR_MDRD                   4.791e-04  2.377e-03   0.202   0.8404    
BMI                       -1.345e-02  1.135e-02  -1.185   0.2368    
MedHx_CVDyes               2.438e-02  8.908e-02   0.274   0.7844    
stenose50-70%             -5.016e-01  5.904e-01  -0.850   0.3959    
stenose70-90%             -3.122e-01  5.487e-01  -0.569   0.5697    
stenose90-99%             -3.628e-01  5.470e-01  -0.663   0.5075    
stenose100% (Occlusion)   -1.110e+00  6.936e-01  -1.601   0.1100    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9289 on 480 degrees of freedom
Multiple R-squared:  0.1889,    Adjusted R-squared:  0.1602 
F-statistic: 6.577 on 17 and 480 DF,  p-value: 3.716e-14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' Eotaxin1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: Eotaxin1_rank 
Effect size...............: 0.318209 
Standard error............: 0.043371 
Odds ratio (effect size)..: 1.375 
Lower 95% CI..............: 1.263 
Upper 95% CI..............: 1.497 
T-value...................: 7.336843 
P-value...................: 9.395425e-13 
R^2.......................: 0.188917 
Adjusted r^2..............: 0.160192 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing TARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + ORdate_year + 
    Med.Statin.LLD + BMI, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]         ORdate_year   Med.Statin.LLDyes                 BMI  
         233.20323             0.27498            -0.11604            -0.26376            -0.01879  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.84543 -0.64613 -0.01877  0.63724  2.65495 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                2.281e+02  9.923e+01   2.298   0.0220 *  
currentDF[, TRAIT]         2.592e-01  4.730e-02   5.480 7.46e-08 ***
Age                       -4.643e-03  5.932e-03  -0.783   0.4343    
Gendermale                 1.255e-01  1.036e-01   1.211   0.2266    
ORdate_year               -1.132e-01  4.954e-02  -2.285   0.0228 *  
Hypertension.compositeyes -1.854e-01  1.382e-01  -1.341   0.1806    
DiabetesStatusDiabetes    -4.917e-02  1.160e-01  -0.424   0.6720    
SmokerStatusEx-smoker      1.822e-02  1.039e-01   0.175   0.8609    
SmokerStatusNever smoked   1.956e-01  1.483e-01   1.319   0.1877    
Med.Statin.LLDyes         -2.696e-01  1.098e-01  -2.456   0.0145 *  
Med.all.antiplateletyes    4.911e-02  1.622e-01   0.303   0.7622    
GFR_MDRD                   9.712e-04  2.639e-03   0.368   0.7131    
BMI                       -2.066e-02  1.251e-02  -1.651   0.0994 .  
MedHx_CVDyes               9.816e-02  9.763e-02   1.005   0.3153    
stenose50-70%             -5.757e-01  5.987e-01  -0.961   0.3369    
stenose70-90%             -3.310e-01  5.520e-01  -0.600   0.5491    
stenose90-99%             -2.886e-01  5.498e-01  -0.525   0.5999    
stenose100% (Occlusion)   -1.009e+00  6.988e-01  -1.444   0.1495    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9313 on 409 degrees of freedom
Multiple R-squared:  0.1491,    Adjusted R-squared:  0.1137 
F-statistic: 4.215 on 17 and 409 DF,  p-value: 6.462e-08

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TARC_rank 
Effect size...............: 0.259178 
Standard error............: 0.047297 
Odds ratio (effect size)..: 1.296 
Lower 95% CI..............: 1.181 
Upper 95% CI..............: 1.422 
T-value...................: 5.47978 
P-value...................: 7.459196e-08 
R^2.......................: 0.14908 
Adjusted r^2..............: 0.113712 
Sample size of AE DB......: 2423 
Sample size of model......: 427 
Missing data %............: 82.37722 

- processing PARC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Med.Statin.LLD + Med.all.antiplatelet, 
    data = currentDF)

Coefficients:
            (Intercept)       currentDF[, TRAIT]                      Age               Gendermale              ORdate_year        Med.Statin.LLDyes  
             141.838177                 0.443802                -0.006814                 0.294597                -0.070732                -0.135797  
Med.all.antiplateletyes  
               0.275088  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.04725 -0.57430 -0.01202  0.62814  2.20609 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               152.088685  80.472825   1.890  0.05937 .  
currentDF[, TRAIT]          0.437723   0.043170  10.140  < 2e-16 ***
Age                        -0.007455   0.005274  -1.414  0.15812    
Gendermale                  0.296610   0.091505   3.241  0.00127 ** 
ORdate_year                -0.075717   0.040148  -1.886  0.05991 .  
Hypertension.compositeyes  -0.131226   0.120874  -1.086  0.27818    
DiabetesStatusDiabetes     -0.023393   0.102830  -0.227  0.82014    
SmokerStatusEx-smoker       0.078039   0.090790   0.860  0.39046    
SmokerStatusNever smoked    0.185541   0.135001   1.374  0.16997    
Med.Statin.LLDyes          -0.134239   0.094499  -1.421  0.15611    
Med.all.antiplateletyes     0.261626   0.145654   1.796  0.07309 .  
GFR_MDRD                    0.001238   0.002278   0.543  0.58708    
BMI                        -0.006185   0.010877  -0.569  0.56985    
MedHx_CVDyes                0.059671   0.085297   0.700  0.48454    
stenose50-70%              -0.106702   0.566388  -0.188  0.85065    
stenose70-90%              -0.103307   0.525362  -0.197  0.84419    
stenose90-99%              -0.122370   0.523727  -0.234  0.81535    
stenose100% (Occlusion)    -0.262180   0.667961  -0.393  0.69486    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.889 on 480 degrees of freedom
Multiple R-squared:  0.2571,    Adjusted R-squared:  0.2308 
F-statistic: 9.771 on 17 and 480 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' PARC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: PARC_rank 
Effect size...............: 0.437723 
Standard error............: 0.04317 
Odds ratio (effect size)..: 1.549 
Lower 95% CI..............: 1.423 
Upper 95% CI..............: 1.686 
T-value...................: 10.13951 
P-value...................: 5.072202e-22 
R^2.......................: 0.257082 
Adjusted r^2..............: 0.230771 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing MDC_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes  
          278.9982              0.3708              0.2965             -0.1393             -0.1490  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.86874 -0.65351 -0.04043  0.53752  3.05362 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                2.700e+02  8.015e+01   3.369 0.000822 ***
currentDF[, TRAIT]         3.642e-01  4.388e-02   8.298 1.33e-15 ***
Age                       -6.351e-03  5.390e-03  -1.178 0.239320    
Gendermale                 3.220e-01  9.462e-02   3.403 0.000728 ***
ORdate_year               -1.342e-01  4.000e-02  -3.356 0.000859 ***
Hypertension.compositeyes -1.157e-01  1.253e-01  -0.924 0.356229    
DiabetesStatusDiabetes    -7.654e-02  1.069e-01  -0.716 0.474509    
SmokerStatusEx-smoker     -1.696e-03  9.395e-02  -0.018 0.985607    
SmokerStatusNever smoked   1.277e-01  1.365e-01   0.936 0.349882    
Med.Statin.LLDyes         -1.610e-01  9.799e-02  -1.643 0.101044    
Med.all.antiplateletyes    1.145e-01  1.542e-01   0.742 0.458204    
GFR_MDRD                   8.789e-05  2.324e-03   0.038 0.969846    
BMI                       -1.387e-02  1.103e-02  -1.257 0.209372    
MedHx_CVDyes               4.530e-02  8.848e-02   0.512 0.608906    
stenose50-70%             -4.430e-01  5.608e-01  -0.790 0.429997    
stenose70-90%             -2.836e-01  5.175e-01  -0.548 0.584037    
stenose90-99%             -3.073e-01  5.156e-01  -0.596 0.551548    
stenose100% (Occlusion)   -1.014e+00  6.543e-01  -1.550 0.121818    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8744 on 436 degrees of freedom
Multiple R-squared:  0.241, Adjusted R-squared:  0.2114 
F-statistic: 8.141 on 17 and 436 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MDC_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MDC_rank 
Effect size...............: 0.364156 
Standard error............: 0.043883 
Odds ratio (effect size)..: 1.439 
Lower 95% CI..............: 1.321 
Upper 95% CI..............: 1.569 
T-value...................: 8.298409 
P-value...................: 1.33225e-15 
R^2.......................: 0.240951 
Adjusted r^2..............: 0.211355 
Sample size of AE DB......: 2423 
Sample size of model......: 454 
Missing data %............: 81.2629 

- processing OPG_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Med.Statin.LLD, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year   Med.Statin.LLDyes  
          433.8263              0.5797              0.1706             -0.2165             -0.1394  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5141 -0.5106 -0.0590  0.4883  2.5977 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               427.287820  68.049889   6.279 7.65e-10 ***
currentDF[, TRAIT]          0.573425   0.036693  15.628  < 2e-16 ***
Age                        -0.002660   0.004737  -0.562   0.5747    
Gendermale                  0.192328   0.082276   2.338   0.0198 *  
ORdate_year                -0.212989   0.033962  -6.271 8.00e-10 ***
Hypertension.compositeyes  -0.152974   0.107846  -1.418   0.1567    
DiabetesStatusDiabetes     -0.020392   0.091840  -0.222   0.8244    
SmokerStatusEx-smoker      -0.009957   0.081469  -0.122   0.9028    
SmokerStatusNever smoked    0.102581   0.120853   0.849   0.3964    
Med.Statin.LLDyes          -0.146496   0.084536  -1.733   0.0837 .  
Med.all.antiplateletyes     0.007738   0.129892   0.060   0.9525    
GFR_MDRD                   -0.000838   0.002031  -0.413   0.6800    
BMI                        -0.005220   0.009716  -0.537   0.5913    
MedHx_CVDyes                0.066458   0.076394   0.870   0.3848    
stenose50-70%              -0.106846   0.505468  -0.211   0.8327    
stenose70-90%              -0.044287   0.469387  -0.094   0.9249    
stenose90-99%              -0.067123   0.467905  -0.143   0.8860    
stenose100% (Occlusion)    -0.347525   0.594619  -0.584   0.5592    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7942 on 479 degrees of freedom
Multiple R-squared:  0.4029,    Adjusted R-squared:  0.3817 
F-statistic: 19.01 on 17 and 479 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' OPG_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: OPG_rank 
Effect size...............: 0.573425 
Standard error............: 0.036693 
Odds ratio (effect size)..: 1.774 
Lower 95% CI..............: 1.651 
Upper 95% CI..............: 1.907 
T-value...................: 15.62752 
P-value...................: 8.723821e-45 
R^2.......................: 0.402862 
Adjusted r^2..............: 0.381669 
Sample size of AE DB......: 2423 
Sample size of model......: 497 
Missing data %............: 79.48824 

- processing sICAM1_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    Hypertension.composite + Med.Statin.LLD + Med.all.antiplatelet, 
    data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale  Hypertension.compositeyes          Med.Statin.LLDyes    Med.all.antiplateletyes  
                  -0.1133                     0.6670                     0.2354                    -0.1616                    -0.1266                     0.1884  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.06932 -0.40155  0.04207  0.43059  2.16413 

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)               95.840446  66.583223   1.439  0.15069    
currentDF[, TRAIT]         0.660727   0.035931  18.389  < 2e-16 ***
Age                        0.002250   0.004495   0.501  0.61686    
Gendermale                 0.224179   0.077357   2.898  0.00393 ** 
ORdate_year               -0.047658   0.033223  -1.434  0.15209    
Hypertension.compositeyes -0.137379   0.101881  -1.348  0.17816    
DiabetesStatusDiabetes    -0.032830   0.086710  -0.379  0.70514    
SmokerStatusEx-smoker      0.101332   0.076614   1.323  0.18659    
SmokerStatusNever smoked   0.114707   0.114022   1.006  0.31492    
Med.Statin.LLDyes         -0.110854   0.079774  -1.390  0.16530    
Med.all.antiplateletyes    0.177777   0.122479   1.451  0.14730    
GFR_MDRD                   0.001653   0.001921   0.861  0.38994    
BMI                       -0.013696   0.009170  -1.494  0.13596    
MedHx_CVDyes              -0.027234   0.072019  -0.378  0.70549    
stenose50-70%             -0.509971   0.476871  -1.069  0.28542    
stenose70-90%             -0.355522   0.443195  -0.802  0.42285    
stenose90-99%             -0.445780   0.441889  -1.009  0.31358    
stenose100% (Occlusion)   -0.697120   0.560445  -1.244  0.21415    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7503 on 480 degrees of freedom
Multiple R-squared:  0.4708,    Adjusted R-squared:  0.452 
F-statistic: 25.12 on 17 and 480 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' sICAM1_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: sICAM1_rank 
Effect size...............: 0.660727 
Standard error............: 0.035931 
Odds ratio (effect size)..: 1.936 
Lower 95% CI..............: 1.805 
Upper 95% CI..............: 2.077 
T-value...................: 18.38887 
P-value...................: 1.477764e-57 
R^2.......................: 0.470782 
Adjusted r^2..............: 0.452039 
Sample size of AE DB......: 2423 
Sample size of model......: 498 
Missing data %............: 79.44697 

- processing VEGFA_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite + SmokerStatus + BMI, 
    data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes      SmokerStatusEx-smoker  
                657.95447                    0.32365                    0.21844                   -0.32809                   -0.25562                    0.11063  
 SmokerStatusNever smoked                        BMI  
                  0.30379                   -0.01841  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3008 -0.5935 -0.0500  0.6200  2.4227 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               642.466588  96.040354   6.690 7.88e-11 ***
currentDF[, TRAIT]          0.327490   0.049225   6.653 9.86e-11 ***
Age                        -0.009134   0.006011  -1.520   0.1294    
Gendermale                  0.217328   0.105227   2.065   0.0396 *  
ORdate_year                -0.319786   0.047942  -6.670 8.87e-11 ***
Hypertension.compositeyes  -0.226216   0.138958  -1.628   0.1044    
DiabetesStatusDiabetes     -0.115174   0.117200  -0.983   0.3264    
SmokerStatusEx-smoker       0.157607   0.102508   1.538   0.1250    
SmokerStatusNever smoked    0.371415   0.156137   2.379   0.0179 *  
Med.Statin.LLDyes          -0.088078   0.107177  -0.822   0.4117    
Med.all.antiplateletyes     0.118234   0.155705   0.759   0.4481    
GFR_MDRD                   -0.001184   0.002523  -0.470   0.6389    
BMI                        -0.021248   0.012637  -1.681   0.0935 .  
MedHx_CVDyes                0.126684   0.097007   1.306   0.1924    
stenose50-70%              -0.356141   0.706324  -0.504   0.6144    
stenose70-90%              -0.487268   0.656480  -0.742   0.4584    
stenose90-99%              -0.555999   0.655133  -0.849   0.3966    
stenose100% (Occlusion)    -1.316272   0.776273  -1.696   0.0908 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9092 on 386 degrees of freedom
Multiple R-squared:  0.1997,    Adjusted R-squared:  0.1645 
F-statistic: 5.667 on 17 and 386 DF,  p-value: 1.641e-11

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' VEGFA_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: VEGFA_rank 
Effect size...............: 0.32749 
Standard error............: 0.049225 
Odds ratio (effect size)..: 1.387 
Lower 95% CI..............: 1.26 
Upper 95% CI..............: 1.528 
T-value...................: 6.652972 
P-value...................: 9.858796e-11 
R^2.......................: 0.199723 
Adjusted r^2..............: 0.164478 
Sample size of AE DB......: 2423 
Sample size of model......: 404 
Missing data %............: 83.32645 

- processing TGFB_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year + Hypertension.composite, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                 Gendermale                ORdate_year  Hypertension.compositeyes  
                 394.9850                     0.1173                     0.3072                    -0.1971                    -0.1996  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4029 -0.6503 -0.0023  0.6538  2.5270 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                3.727e+02  8.640e+01   4.314 1.97e-05 ***
currentDF[, TRAIT]         1.151e-01  4.569e-02   2.518  0.01213 *  
Age                       -7.562e-03  5.876e-03  -1.287  0.19879    
Gendermale                 3.330e-01  1.023e-01   3.255  0.00122 ** 
ORdate_year               -1.855e-01  4.312e-02  -4.301 2.08e-05 ***
Hypertension.compositeyes -2.047e-01  1.333e-01  -1.536  0.12529    
DiabetesStatusDiabetes    -7.342e-02  1.152e-01  -0.638  0.52405    
SmokerStatusEx-smoker      9.055e-02  1.010e-01   0.897  0.37036    
SmokerStatusNever smoked   3.343e-01  1.514e-01   2.209  0.02767 *  
Med.Statin.LLDyes         -1.448e-01  1.057e-01  -1.370  0.17140    
Med.all.antiplateletyes    1.293e-01  1.600e-01   0.808  0.41953    
GFR_MDRD                   6.369e-05  2.538e-03   0.025  0.97999    
BMI                       -1.626e-02  1.211e-02  -1.343  0.18005    
MedHx_CVDyes               7.531e-02  9.475e-02   0.795  0.42712    
stenose50-70%             -5.266e-01  6.146e-01  -0.857  0.39202    
stenose70-90%             -2.725e-01  5.712e-01  -0.477  0.63351    
stenose90-99%             -2.543e-01  5.695e-01  -0.446  0.65547    
stenose100% (Occlusion)   -1.070e+00  7.220e-01  -1.481  0.13916    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9661 on 456 degrees of freedom
Multiple R-squared:  0.1171,    Adjusted R-squared:  0.08417 
F-statistic: 3.557 on 17 and 456 DF,  p-value: 2.502e-06

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' TGFB_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: TGFB_rank 
Effect size...............: 0.115068 
Standard error............: 0.045691 
Odds ratio (effect size)..: 1.122 
Lower 95% CI..............: 1.026 
Upper 95% CI..............: 1.227 
T-value...................: 2.518373 
P-value...................: 0.0121311 
R^2.......................: 0.117082 
Adjusted r^2..............: 0.084167 
Sample size of AE DB......: 2423 
Sample size of model......: 474 
Missing data %............: 80.43747 

- processing MMP2_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Gender + 
    ORdate_year, data = currentDF)

Coefficients:
       (Intercept)  currentDF[, TRAIT]          Gendermale         ORdate_year  
          304.4297              0.3750              0.3703             -0.1520  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4837 -0.5718 -0.0139  0.6128  2.4435 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)                2.849e+02  8.571e+01   3.324 0.000960 ***
currentDF[, TRAIT]         3.568e-01  4.678e-02   7.627 1.39e-13 ***
Age                       -7.665e-03  5.601e-03  -1.369 0.171785    
Gendermale                 3.938e-01  9.732e-02   4.046 6.11e-05 ***
ORdate_year               -1.419e-01  4.277e-02  -3.318 0.000979 ***
Hypertension.compositeyes -9.213e-02  1.296e-01  -0.711 0.477414    
DiabetesStatusDiabetes    -1.266e-02  1.097e-01  -0.115 0.908206    
SmokerStatusEx-smoker      9.316e-03  9.652e-02   0.097 0.923151    
SmokerStatusNever smoked   1.612e-01  1.431e-01   1.126 0.260718    
Med.Statin.LLDyes         -1.025e-01  9.881e-02  -1.038 0.299983    
Med.all.antiplateletyes    1.319e-01  1.559e-01   0.846 0.398008    
GFR_MDRD                  -6.253e-04  2.447e-03  -0.256 0.798406    
BMI                       -1.121e-02  1.171e-02  -0.958 0.338746    
MedHx_CVDyes               2.992e-02  9.069e-02   0.330 0.741621    
stenose50-70%             -2.844e-03  5.902e-01  -0.005 0.996157    
stenose70-90%              9.290e-02  5.475e-01   0.170 0.865339    
stenose90-99%              1.044e-01  5.459e-01   0.191 0.848380    
stenose100% (Occlusion)   -6.307e-01  6.909e-01  -0.913 0.361779    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9222 on 459 degrees of freedom
Multiple R-squared:  0.1955,    Adjusted R-squared:  0.1657 
F-statistic:  6.56 on 17 and 459 DF,  p-value: 4.844e-14

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP2_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP2_rank 
Effect size...............: 0.3568 
Standard error............: 0.046779 
Odds ratio (effect size)..: 1.429 
Lower 95% CI..............: 1.304 
Upper 95% CI..............: 1.566 
T-value...................: 7.627405 
P-value...................: 1.392688e-13 
R^2.......................: 0.195463 
Adjusted r^2..............: 0.165666 
Sample size of AE DB......: 2423 
Sample size of model......: 477 
Missing data %............: 80.31366 

- processing MMP8_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + SmokerStatus + 
    Med.all.antiplatelet + BMI + stenose, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                        Age                 Gendermale                ORdate_year  Hypertension.compositeyes  
                407.49841                    0.47258                   -0.01079                    0.14007                   -0.20233                   -0.30045  
    SmokerStatusEx-smoker   SmokerStatusNever smoked    Med.all.antiplateletyes                        BMI              stenose50-70%              stenose70-90%  
                  0.17313                    0.32439                    0.24655                   -0.03177                   -0.80804                   -0.68502  
            stenose90-99%    stenose100% (Occlusion)  
                 -0.60890                   -1.62204  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.06911 -0.54053  0.02395  0.54548  2.68890 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               396.174815  79.386931   4.990 8.57e-07 ***
currentDF[, TRAIT]          0.473215   0.041069  11.522  < 2e-16 ***
Age                        -0.010761   0.005218  -2.062  0.03974 *  
Gendermale                  0.131128   0.092224   1.422  0.15575    
ORdate_year                -0.196685   0.039619  -4.964 9.73e-07 ***
Hypertension.compositeyes  -0.278728   0.119263  -2.337  0.01986 *  
DiabetesStatusDiabetes     -0.024611   0.102482  -0.240  0.81032    
SmokerStatusEx-smoker       0.177017   0.090168   1.963  0.05023 .  
SmokerStatusNever smoked    0.323357   0.132778   2.435  0.01526 *  
Med.Statin.LLDyes          -0.090403   0.092376  -0.979  0.32827    
Med.all.antiplateletyes     0.248239   0.145528   1.706  0.08873 .  
GFR_MDRD                    0.001309   0.002298   0.570  0.56911    
BMI                        -0.031639   0.011018  -2.871  0.00428 ** 
MedHx_CVDyes                0.023068   0.084768   0.272  0.78565    
stenose50-70%              -0.861245   0.549700  -1.567  0.11786    
stenose70-90%              -0.721187   0.512264  -1.408  0.15985    
stenose90-99%              -0.651536   0.509866  -1.278  0.20195    
stenose100% (Occlusion)    -1.677012   0.647752  -2.589  0.00993 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8621 on 459 degrees of freedom
Multiple R-squared:  0.2969,    Adjusted R-squared:  0.2708 
F-statistic:  11.4 on 17 and 459 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP8_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP8_rank 
Effect size...............: 0.473215 
Standard error............: 0.041069 
Odds ratio (effect size)..: 1.605 
Lower 95% CI..............: 1.481 
Upper 95% CI..............: 1.74 
T-value...................: 11.52248 
P-value...................: 3.710762e-27 
R^2.......................: 0.296872 
Adjusted r^2..............: 0.27083 
Sample size of AE DB......: 2423 
Sample size of model......: 477 
Missing data %............: 80.31366 

- processing MMP9_rank


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + SmokerStatus + 
    Med.all.antiplatelet + BMI, data = currentDF)

Coefficients:
              (Intercept)         currentDF[, TRAIT]                        Age                 Gendermale                ORdate_year  Hypertension.compositeyes  
                261.74610                    0.60020                   -0.01143                    0.21359                   -0.13001                   -0.18921  
    SmokerStatusEx-smoker   SmokerStatusNever smoked    Med.all.antiplateletyes                        BMI  
                  0.13122                    0.23333                    0.32574                   -0.03044  


Call:
lm(formula = currentDF[, PROTEIN] ~ currentDF[, TRAIT] + Age + 
    Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.07159 -0.47744 -0.02571  0.49342  2.79265 

Coefficients:
                            Estimate Std. Error t value Pr(>|t|)    
(Intercept)               255.302470  72.052050   3.543 0.000436 ***
currentDF[, TRAIT]          0.602903   0.037128  16.238  < 2e-16 ***
Age                        -0.011154   0.004713  -2.366 0.018380 *  
Gendermale                  0.202433   0.082269   2.461 0.014238 *  
ORdate_year                -0.126662   0.035959  -3.522 0.000471 ***
Hypertension.compositeyes  -0.169317   0.108823  -1.556 0.120423    
DiabetesStatusDiabetes      0.007354   0.092609   0.079 0.936743    
SmokerStatusEx-smoker       0.139631   0.081284   1.718 0.086506 .  
SmokerStatusNever smoked    0.244867   0.120009   2.040 0.041883 *  
Med.Statin.LLDyes          -0.106001   0.083422  -1.271 0.204497    
Med.all.antiplateletyes     0.276223   0.131469   2.101 0.036183 *  
GFR_MDRD                    0.001761   0.002075   0.849 0.396498    
BMI                        -0.033145   0.009935  -3.336 0.000919 ***
MedHx_CVDyes                0.047506   0.076557   0.621 0.535216    
stenose50-70%              -0.296349   0.495684  -0.598 0.550230    
stenose70-90%              -0.238666   0.460977  -0.518 0.604889    
stenose90-99%              -0.260377   0.459383  -0.567 0.571131    
stenose100% (Occlusion)    -1.037848   0.582274  -1.782 0.075346 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7786 on 458 degrees of freedom
Multiple R-squared:  0.4262,    Adjusted R-squared:  0.4049 
F-statistic: 20.01 on 17 and 458 DF,  p-value: < 2.2e-16

Analyzing in dataset ' AEDB.CEA ' the association of ' MCP1_rank ' with ' MMP9_rank ' .
Collecting data.

We have collected the following and summarize it in an object:
Dataset...................: AEDB.CEA 
Score/Exposure/biomarker..: MCP1_rank 
Trait/outcome.............: MMP9_rank 
Effect size...............: 0.602903 
Standard error............: 0.037128 
Odds ratio (effect size)..: 1.827 
Lower 95% CI..............: 1.699 
Upper 95% CI..............: 1.965 
T-value...................: 16.2383 
P-value...................: 3.674529e-47 
R^2.......................: 0.426227 
Adjusted r^2..............: 0.40493 
Sample size of AE DB......: 2423 
Sample size of model......: 476 
Missing data %............: 80.35493 
cat("Edit the column names...\n")
Edit the column names...
colnames(GLM.results) = c("Dataset", "Predictor", "Trait",
                          "Beta", "s.e.m.",
                          "OR", "low95CI", "up95CI",
                          "T-value", "P-value", "r^2", "r^2_adj", "AE_N", "Model_N", "Perc_Miss")

cat("Correct the variable types...\n")
Correct the variable types...
GLM.results$Beta <- as.numeric(GLM.results$Beta)
GLM.results$s.e.m. <- as.numeric(GLM.results$s.e.m.)
GLM.results$OR <- as.numeric(GLM.results$OR)
GLM.results$low95CI <- as.numeric(GLM.results$low95CI)
GLM.results$up95CI <- as.numeric(GLM.results$up95CI)
GLM.results$`T-value` <- as.numeric(GLM.results$`T-value`)
GLM.results$`P-value` <- as.numeric(GLM.results$`P-value`)
GLM.results$`r^2` <- as.numeric(GLM.results$`r^2`)
GLM.results$`r^2_adj` <- as.numeric(GLM.results$`r^2_adj`)
GLM.results$`AE_N` <- as.numeric(GLM.results$`AE_N`)
GLM.results$`Model_N` <- as.numeric(GLM.results$`Model_N`)
GLM.results$`Perc_Miss` <- as.numeric(GLM.results$`Perc_Miss`)
DT::datatable(GLM.results)

# Save the data
cat("Writing results to Excel-file...\n")
### Univariate
library(openxlsx)
write.xlsx(GLM.results,
           file = paste0(OUT_loc, "/",Today,".AEDB.CEA.Con.Multi.MCP1_Plaque.Cytokines_Plaques.RANK.MODEL2.xlsx"),
           row.names = FALSE, col.names = TRUE, sheetName = "Con.Multi.PlaquePheno")
# Removing intermediates
cat("Removing intermediate files...\n")
rm(TRAIT, trait, currentDF, GLM.results, GLM.results.TEMP, fit, model_step)

MCP1 levels vs. vulnerability index

Here we calculate the plaque instability/vulnerability index and visualize the MCP1 levels in plaque.

# Plaque vulnerability

table(AEDB.CEA$Macrophages.bin)

      no/minor moderate/heavy 
           847            992 
table(AEDB.CEA$Fat.bin_10)

 <10%  >10% 
  542  1316 
table(AEDB.CEA$Collagen.bin)

      no/minor moderate/heavy 
           382           1469 
table(AEDB.CEA$SMC.bin)

      no/minor moderate/heavy 
           602           1244 
table(AEDB.CEA$IPH.bin)

  no  yes 
 746 1108 
# SPSS code

# 
# *** syntax- Plaque vulnerability**.
# COMPUTE Macro_instab = -999.
# IF macrophages.bin=2 Macro_instab=1.
# IF macrophages.bin=1 Macro_instab=0.
# EXECUTE.
# 
# COMPUTE Fat10_instab = -999.
# IF Fat.bin_10=2 Fat10_instab=1.
# IF Fat.bin_10=1 Fat10_instab=0.
# EXECUTE.
# 
# COMPUTE coll_instab=-999.
# IF Collagen.bin=2 coll_instab=0.
# IF Collagen.bin=1 coll_instab=1.
# EXECUTE.
# 
# 
# COMPUTE SMC_instab=-999.
# IF SMC.bin=2 SMC_instab=0.
# IF SMC.bin=1 SMC_instab=1.
# EXECUTE.
# 
# COMPUTE IPH_instab=-999.
# IF IPH.bin=0 IPH_instab=0.
# IF IPH.bin=1 IPH_instab=1.
# EXECUTE.
# 
# COMPUTE Instability=Macro_instab + Fat10_instab +  coll_instab + SMC_instab + IPH_instab.
# EXECUTE.

# Fix plaquephenotypes
attach(AEDB.CEA)
# mac instability
AEDB.CEA[,"MAC_Instability"] <- NA
AEDB.CEA$MAC_Instability[Macrophages.bin == -999] <- NA
AEDB.CEA$MAC_Instability[Macrophages.bin == "no/minor"] <- 0
AEDB.CEA$MAC_Instability[Macrophages.bin == "moderate/heavy"] <- 1

# fat instability
AEDB.CEA[,"FAT10_Instability"] <- NA
AEDB.CEA$FAT10_Instability[Fat.bin_10 == -999] <- NA
AEDB.CEA$FAT10_Instability[Fat.bin_10 == " <10%"] <- 0
AEDB.CEA$FAT10_Instability[Fat.bin_10 == " >10%"] <- 1

# col instability 
AEDB.CEA[,"COL_Instability"] <- NA
AEDB.CEA$COL_Instability[Collagen.bin == -999] <- NA
AEDB.CEA$COL_Instability[Collagen.bin == "no/minor"] <- 1
AEDB.CEA$COL_Instability[Collagen.bin == "moderate/heavy"] <- 0

# smc instability
AEDB.CEA[,"SMC_Instability"] <- NA
AEDB.CEA$SMC_Instability[SMC.bin == -999] <- NA
AEDB.CEA$SMC_Instability[SMC.bin == "no/minor"] <- 1
AEDB.CEA$SMC_Instability[SMC.bin == "moderate/heavy"] <- 0

# iph instability
AEDB.CEA[,"IPH_Instability"] <- NA
AEDB.CEA$IPH_Instability[IPH.bin == -999] <- NA
AEDB.CEA$IPH_Instability[IPH.bin == "no"] <- 0
AEDB.CEA$IPH_Instability[IPH.bin == "yes"] <- 1

detach(AEDB.CEA)

table(AEDB.CEA$MAC_Instability, useNA = "ifany")

   0    1 <NA> 
 847  992  584 
table(AEDB.CEA$FAT10_Instability, useNA = "ifany")

   0    1 <NA> 
 542 1316  565 
table(AEDB.CEA$COL_Instability, useNA = "ifany")

   0    1 <NA> 
1469  382  572 
table(AEDB.CEA$SMC_Instability, useNA = "ifany")

   0    1 <NA> 
1244  602  577 
table(AEDB.CEA$IPH_Instability, useNA = "ifany")

   0    1 <NA> 
 746 1108  569 
# creating vulnerability index
AEDB.CEA <- AEDB.CEA %>% mutate(Plaque_Vulnerability_Index = factor(rowSums(.[grep("_Instability", names(.))], na.rm = TRUE)),
                                )

table(AEDB.CEA$Plaque_Vulnerability_Index, useNA = "ifany")

  0   1   2   3   4   5 
713 348 479 535 251  97 
# str(AEDB.CEA$Plaque_Vulnerability_Index)

Here we plot the levels of inverse-rank normal transformed MCP1 plaque levels from experiment 1 and 2 to the Plaque vulnerability index.

library(sjlabelled)

attach(AEDB.CEA)
The following objects are masked from AEDB.CEA (pos = 3):

    ABI_70, ABI_max, ABI_mean, ABI_min, ABI_OP, ablock, ablock2, ablock3, aceinhib, aceinhib2, acetylsa, Adiponectin_ng_ml_2015,
    Adiponectin_pg_ug_2015, AE_AAA_bijzonderheden, Age, Age_Q, AgeGroup, AgeGroupSex, AgeSQR, aid, AlcoholUse, Aldosteron_recode, alg10201, alg10202,
    alg10203, alg10204, alg10205, alg105, alg106, alg109, alg110, alg113, alg114, alg115, ALOX5, analg2, analg3, analgeti, Ang2, angioii, ANGPT2,
    anti_apoA1_IgG, anti_apoA1_index, anti_apoA1_na, antiall, antiall2, antiarrh, antiarrh2, ANXA2, AP_Dx, AP_Dx1, AP_Dx2, APOB, artercon,
    Artery_summary, arteryop, AsymptSympt, AsymptSympt2G, bblock, bblock2, blocko, blocksnr, BMI, BMI_US, BMI_WHO, BMI30ormore, BMIGroup, brain401,
    brain402, brain403, brain404, brain405, brain406, brain407, brain408, brain409, brain410, brain411, brain412, brain413, brn40701, bspoed, CAD_Dx,
    CAD_Dx1, CAD_Dx2, CAD_history, CADPAOD_history, Calc.bin, calcification, CalcificationPlaque, calcium, calcium2, calreg, carbasal, cardioembolic,
    Caspase3_7, CAV1, CD44, CD44V3, CEA_or_CAS, CEL, CFD_recalc, cholverl, cholverl2, cholverl3, CI_history, clau1, clau2, Claudication, clopidog,
    CML, COL_Instability, collagen, Collagen.bin, CollagenPlaque, combi1, combi2, combi3, comorbidity.DM, concablo, concablo2, concablo3, concace2,
    concacei, concacet, concalle, concanal, concanal2, concanal3, concangi, concanta2, concanti, concanti2, concbblo, concbblo2, conccalc, conccalc2,
    conccalreg, conccarb, concchol, concchol2, concchol3, concclau1, concclau2, concclop, conccom1, conccom2, conccom3, conccort, conccorthorm2,
    concderm, concdig, concdig2, concdig3, concdig4, concdipy, concdiur, concdiur2, concdiur3, concerec, conceye, concgluc, concgluc2, concgluc3,
    concgluc4, concgrel, concinsu, conciron, conciron2, concneur, concneur2, concneur3, concneur4, concnitr, concnitr2, concotant, concotcor,
    concoth2, concothe, concpros, concpsy5, concren, concresp, concrheu, concrheu2, concrheu3, concsta2, concstat, concthro, concthyr, concthyr2,
    concvit2, concvita, Contralateral_surgery, conwhen, corticos, cortihorm2, creat, crp_all, CRP_avg, CRP_dif, crp_source, CRP_var, CST3_pg_ug,
    CST3_serum_luminex, CTGF, cTNI_plasma, CTSA, CTSB, CTSL1, CTSS, cyr61, date_ic_patient, date_ic_researcher, Date.of.birth,
    date.previous.operation, date1yr, date3mon, dateapprox_latest, dateapprox_worst, dateapprox1, dateapprox2, dateapprox3, dateapprox4, dateend1,
    dateend2, dateend3, dateend4, dateend5, dateend6, dateexact_latest, dateexact_worst, dateexact1, dateexact2, dateexact3, dateexact4, dateok,
    dermacor, DiabetesStatus, diastoli, diet801, diet802, diet803, diet804, diet805, diet806, diet807, diet808, diet809, diet810, diet811, diet812,
    diet813, diet814, diet815, diet816, diet817, diet818, diet819, diet820, diet821, diet822, diet823, diet824, dipyridi, diuretic, diuretic2,
    diuretic3, DM, DM.composite, duaalantiplatelet, duplend, eaindexl, eaindexr, eCigarettes, edaplaqu_recalc, edavrspl, eGFRGroup, EGR, EMMPRIN_45kD,
    EMMPRIN_58kD, ENDOGLIN, endpoint1, endpoint2, endpoint3, endpoint4, endpoint5, endpoint6, Eotaxin1, Eotaxin1_rank, EP_CAD, ep_cad_t_30days,
    ep_cad_t_3years, EP_CAD_time, ep_cad.30days, EP_CI, ep_ci_t_30days, ep_ci_t_3years, EP_CI_time, ep_com_t_30days, ep_com_t_3years, EP_composite,
    EP_composite_time, EP_coronary, ep_coronary_t_30days, ep_coronary_t_3years, ep_coronary_t_90days, EP_coronary_time, EP_CVdeath,
    ep_cvdeath_t_30days, ep_cvdeath_t_3years, ep_cvdeath_t_90days, EP_CVdeath_time, EP_death, ep_death_t_30days, ep_death_t_3years, EP_death_time,
    EP_fatalCVA, ep_fatalCVA_t_30days, ep_fatalCVA_t_3years, EP_fatalCVA_time, EP_hemorrhagic_stroke, ep_hemorrhagic_stroke_t_3years,
    EP_hemorrhagic_stroke_time, ep_hemorrhagic_stroke.3years, EP_ischemic_stroke, ep_ischemic_stroke_t_3years, EP_ischemic_stroke_time,
    ep_ischemic_stroke.3years, EP_leg_amputation, EP_leg_amputation_time, ep_legamputation_t_30days, ep_legamputation_t_3years, EP_major,
    ep_major_t_30days, ep_major_t_3years, ep_major_t_90days, EP_major_time, EP_MI, ep_mi_t_30days, ep_mi_t_3years, EP_MI_time, EP_nonstroke_event,
    EP_nonstroke_event_time, ep_nonstroke_t_3years, EP_peripheral, ep_peripheral_t_30days, ep_peripheral_t_3years, EP_peripheral_time, EP_pta,
    ep_pta_t_30days, ep_pta_t_3years, EP_pta_time, EP_stroke, ep_stroke_t_30days, ep_stroke_t_3years, ep_stroke_t_90days, EP_stroke_time,
    EP_strokeCVdeath, ep_strokeCVdeath_t_30days, ep_strokeCVdeath_t_3years, EP_strokeCVdeath_time, EP_strokedeath, ep_strokedeath_t_30days,
    ep_strokedeath_t_3years, EP_strokedeath_time, ePackYearsSmoking, epcad.3years, epci.30days, epci.3years, epcom.30days, epcom.3years,
    epcoronary.30days, epcoronary.3years, epcoronary.90days, epcvdeath.30days, epcvdeath.3years, epcvdeath.90days, epdeath.30days, epdeath.3years,
    epfatalCVA.30days, epfatalCVA.3years, eplegamputation.30days, eplegamputation.3years, epmajor.30days, epmajor.3years, epmajor.90days, epmi.30days,
    epmi.3years, epnonstroke.3years, epperipheral.30days, epperipheral.3years, eppta.30days, eppta.3years, epstroke.30days, epstroke.3years,
    epstroke.90days, epstrokeCVdeath.30days, epstrokeCVdeath.3years, epstrokedeath.30days, epstrokedeath.3years, erec, Estradiol,
    everstroke_composite, Everstroke_Ipsilateral, exer901, exer902, exer903, exer904, exer905, exer906, exer9071, exer9072, exer9073, exer9074,
    exer9075, exer9076, exer908, exer909, exer910, eyedrop, EZis, FABP_serum, FABP4, FABP4_pg_ug, FABP4_serum_luminex, fat, Fat.bin_10, Fat.bin_40,
    FAT10_Instability, Fat10Perc, Femoral.interv, FH_AAA_broth, FH_AAA_comp, FH_AAA_mat, FH_AAA_parent, FH_AAA_pat, FH_AAA_sibling, FH_AAA_sis,
    FH_amp_broth, FH_amp_comp, FH_amp_mat, FH_amp_parent, FH_amp_pat, FH_amp_sibling, FH_amp_sis, FH_CAD_broth, FH_CAD_comp, FH_CAD_mat,
    FH_CAD_parent, FH_CAD_pat, FH_CAD_sibling, FH_CAD_sis, FH_corcalc_broth, FH_corcalc_comp, FH_corcalc_mat, FH_corcalc_parent, FH_corcalc_pat,
    FH_corcalc_sibling, FH_corcalc_sis, FH_CVD_broth, FH_CVD_comp, FH_CVD_mat, FH_CVD_parent, FH_CVD_pat, FH_CVD_sibling, FH_CVD_sis,
    FH_CVdeath_broth, FH_CVdeath_comp, FH_CVdeath_mat, FH_CVdeath_parent, FH_CVdeath_pat, FH_CVdeath_sibling, FH_CVdeath_sis, FH_DM_broth, FH_DM_comp,
    FH_DM_mat, FH_DM_parent, FH_DM_pat, FH_DM_sibling, FH_DM_sis, FH_HC_broth, FH_HC_comp, FH_HC_mat, FH_HC_parent, FH_HC_pat, FH_HC_sibling,
    FH_HC_sis, FH_HT_broth, FH_HT_comp, FH_HT_mat, FH_HT_parent, FH_HT_pat, FH_HT_sibling, FH_HT_sis, FH_MI_broth, FH_MI_comp, FH_MI_mat,
    FH_MI_parent, FH_MI_pat, FH_MI_sibling, FH_MI_sis, FH_otherCVD_broth, FH_otherCVD_comp, FH_otherCVD_mat, FH_otherCVD_parent, FH_otherCVD_pat,
    FH_otherCVD_sibling, FH_otherCVD_sis, FH_PAD_broth, FH_PAD_comp, FH_PAD_mat, FH_PAD_parent, FH_PAD_pat, FH_PAD_sibling, FH_PAD_sis, FH_PAV_broth,
    FH_PAV_comp, FH_PAV_mat, FH_PAV_parent, FH_PAV_pat, FH_PAV_sibling, FH_PAV_sis, FH_POB_broth, FH_POB_comp, FH_POB_mat, FH_POB_parent, FH_POB_pat,
    FH_POB_sibling, FH_POB_sis, FH_risk_broth, FH_risk_comp, FH_risk_mat, FH_risk_parent, FH_risk_pat, FH_risk_sibling, FH_risk_sis, FH_Stroke_broth,
    FH_Stroke_comp, FH_Stroke_mat, FH_Stroke_parent, FH_Stroke_pat, FH_Stroke_sibling, FH_Stroke_sis, FH_tromb_broth, FH_tromb_comp, FH_tromb_mat,
    FH_tromb_parent, FH_tromb_pat, FH_tromb_sibling, FH_tromb_sis, filter_$, folicaci, followup1, followup2, followup3, Fontaine, FU_check,
    FU_check_date, FU.cutt.off.30days, FU.cutt.off.3years, FU.cutt.off.90days, FU1JAAR, FU2JAAR, FU3JAAR, FURIN_low, FURIN_up, GDF15_plasma, geen_med,
    Gender, GFR_CG, GFR_MDRD, glucose, GR_Segment, GrB_plaque, GrB_serum, grel, GrK_plaque, GrK_serum, GrM_plaque, GrM_serum, HA, hb, HDAC9, HDL,
    HDL_2016, HDL_all, HDL_avg, HDL_clinic, HDL_dif, HDL_final, HDL_finalCU, hdl_source, HDL_var, heart300, heart301, heart302, heart303, heart304,
    heart305, heart306, heart307, heart308, heart309, heart310, heart311, heart312, heart313, heart314, heart315, heart316, heart317, heart318,
    heart319, heart320, heart321, heart322, heart323, heart324, heart325, heart326, heart327, heart328, HIF1A, ho1, homocys, Hospital, hrt31301,
    hsCRP_plasma, ht, HYAL55KD, HYALURON, Hypercholesterolemia, Hypertension.composite, Hypertension.drugs, Hypertension.selfreport,
    Hypertension.selfreportdrug, Hypertension1, Hypertension2, IL1_Beta, IL10, IL10_rank, IL12, IL12_rank, IL13, IL13_rank, IL17, IL2, IL2_rank, IL21,
    IL21_rank, IL4, IL4_rank, IL5, IL5_rank, IL6, IL6_pg_ml_2015, IL6_pg_ug_2015, IL6_rank, IL6R_pg_ml_2015, IL6R_pg_ug_2015, IL8, IL8_pg_ml_2015,
    IL8_pg_ug_2015, IL8_rank, IL9, IL9_rank, indexsymptoms_latest, indexsymptoms_latest_4g, indexsymptoms_worst, indexsymptoms_worst_4g, INFG,
    INFG_rank, informedconsent, insulin, insuline, INVULDAT, IP10, IP10_rank, IPH, IPH_extended.bin, IPH_Instability, IPH.bin, ironfoli, ironfoli2,
    KDOQI, latest, LDL, LDL_2016, LDL_all, LDL_avg, LDL_clinic, LDL_dif, LDL_final, LDL_finalCU, ldl_source, LDL_var, LDLGroup, leg501, leg502,
    leg503, leg504, leg505, leg506, leg507, leg508, leg509, leg510, leg511, leg512, leg513, leg514, leg515, leg516, leg517, leg518, leg519, leg520,
    LMW1STME, LTB4, LTB4R, MAC_binned, MAC_grouped, MAC_Instability, MAC_SMC_ratio, MAC_SMC_ratio_rank, macmean0, macrophages, Macrophages_LN,
    macrophages_location, Macrophages_rank, Macrophages.bin, MAP, Mast_cells_plaque, max.followup, MCP1, MCP1_pg_ml_2015, MCP1_pg_ml_2015_rank,
    MCP1_pg_ug_2015, MCP1_rank, MCSF_pg_ml_2015, MCSF_pg_ug_2015, MDC, MDC_rank, Med_notes, Med.ablock, Med.ACE_inh, Med.acetylsal,
    Med.acetylsal_Combi1, Med.acetylsal_Combi2, Med.acetylsal_Combi3, Med.ADPinh, Med.all.antiplatelet, Med.angiot2.antag, Med.antiarrh,
    Med.anticoagulants, Med.ascal, Med.aspirin.derived, Med.bblocker, Med.calc_antag, Med.dipyridamole, Med.diuretic, Med.LLD, Med.nitrate,
    Med.otheranthyp, Med.renin, Med.statin, Med.statin.derived, Med.Statin.LLD, Med.statin2, MedHx_CVD, media, MG_H1, MI_Dx, MI_Dx1, MI_Dx2, MIF,
    MIF_rank, MIG, MIG_rank, MIP1a, MIP1a_rank, miRNA100_RNU19, miRNA100_RNU48, miRNA155_RNU19, miRNA155_RNU48, MMP14, MMP2, MMP2_rank, MMP2TIMP2,
    MMP8, MMP8_rank, MMP9, MMP9_rank, MMP9TIMP1, MPO_plasma, MRP_14, MRP_8, MRP_8_14C, MRP_8_14C_buhlmann, MRP14_plasma, MRP8_14C_plasma, MRP8_plasma,
    negatibl, neuropsy, neuropsy2, neuropsy3, neuropsy4, neurpsy5, neutrophils, NGAL, NGAL_low, NGAL_MMP9_complex, NGAL_MMP9_local,
    NGAL_MMP9_peripheral, NGAL_total, NGAL_up, nitrate, nitrate2, NOD1, NOD2, nogobt1_recalculated, NTproBNP_plasma, Number_Events_Sorter,
    Number_Sorted_CD14, Number_Sorted_CD20, Number_Sorted_CD4_Cells, Number_Sorted_CD8_Cells, oac701, oac702, oac70305, oac704, oac705, oac706,
    oac707, oac708, oac709, oac710, oac711, oac712, oac713, oac714, OKyear, OPG, OPG_plasma, OPG_rank, OPN, OPN_2013, OPN_plasma, OR_blood,
    Oral.glucose.inh, oralgluc, oralgluc2, oralgluc3, oralgluc4, ORdate_epoch, ORdate_year, ORyear, othanthyp, othcoron, other, other2,
    OverallPlaquePhenotype, PAI1_pg_ml_2015, PAI1_pg_ug_2015, PAOD, PARC, PARC_rank, patch, PCSK9_plasma, PDGF_BB_plasma, Percentage_CD14,
    Percentage_CD20, Percentage_CD4, Percentage_CD8, Peripheral.interv, PKC, PLA2_plasma, Plaque_Vulnerability_Index, plaquephenotype, positibl,
    PrimaryLast, PrimaryLast1, prostagl, PulsePressure, qual01, qual02, qual0301, qual0302, qual0303, qual0304, qual0305, qual0306, qual0307,
    qual0308, qual0309, qual0310, qual0401, qual0402, qual0403, qual0404, qual0501, qual0502, qual0503, qual06, qual07, qual08, qual0901, qual0902,
    qual0903, qual0904, qual0905, qual0906, qual0907, qual0908, qual0909, qual1010, qual1101, qual1102, qual1103, qual1104, RAAS_med, RANTES,
    RANTES_pg_ml_2015, RANTES_pg_ug_2015, RANTES_plasma, RANTES_rank, Ras, RE50_01, RE70_01, Renine_recode, renineinh, restenos, restenosisOK, rheuma,
    rheuma2, rheuma3, risk601, risk602, risk603, risk604, risk605, risk606, risk607, risk608, risk609, risk610, risk611, risk612, risk613, risk614,
    risk615, risk616, risk617, risk618, risk619, risk620, SBPGroup, Segment_isolated_Tris_2015, SHBG, sICAM1, sICAM1_rank, SMAD1_5_8, SMAD2, SMAD3,
    smc, SMC_binned, SMC_grouped, SMC_Instability, SMC_LN, smc_location, smc_macrophages_ratio, SMC_rank, SMC.bin, smcmean0, SmokerCurrent,
    SmokerStatus, SmokingReported, SmokingYearOR, stat3P, statin2, statines, ste3mext, sten1yr, sten3mo, stenose, stenosis_con_bin,
    Stenosis_contralateral, Stenosis_ipsilateral, StenoticGroup, Stroke_Dx, Stroke_eitherside, Stroke_history, Stroke_Symptoms, StrokeTIA_Dx,
    StrokeTIA_history, StrokeTIA_Symptoms, STUDY_NUMBER, sympt, Sympt_latest, Sympt_worst, sympt1, sympt2, sympt3, sympt4, Symptoms.3g, Symptoms.4g,
    Symptoms.5G, systolic, T_NUMBER, TARC, TARC_rank, TAT_plasma, TC_2016, TC_all, TC_avg, TC_clinic, TC_dif, TC_final, TC_finalCU, TC_var,
    Testosterone, TG_2016, TG_all, TG_avg, TG_clinic, TG_dif, TG_final, TG_finalCU, TG_var, TGF, TGFB, TGFB_rank, thrombos, thrombus,
    thrombus_location, thrombus_new, thrombus_organization, thrombus_organization_v2, thrombus_percentage, thyros2, thyrosta, Time_event_OR,
    TimeOR_latest, TimeOR_latest_4g, TimeOR_worst, TimeOR_worst_4g, TIMP1, TIMP2, TISNOW, TNFA, TNFA_rank, totalchol, totalcholesterol_source,
    tractdig, tractdig2, tractdig3, tractdig4, tractres, Treatment.DM, TREM1, triglyceride_source, triglyceriden, Tris_protein_conc_ug_ml_2015, Trop1,
    Trop1DT, Trop2, Trop2DT, Trop3, Trop3DT, TropmaxpostOK, TropoMax, TropoMaxDT, tropomaxpositief, TSratio_blood, TSratio_plaque, UPID,
    validation_date, validation1, validation2, validation3, validation4, validation5, validation6, VAR00001, VEGFA, VEGFA_plasma, VEGFA_rank,
    vegfa422, vessel_density, vessel_density_additional, vessel_density_averaged, vessel_density_Timo2012, vessel_density_Timo2012_2,
    vessel_density_Timo2013, VesselDensity_LN, VesselDensity_rank, vitamin, vitamin2, vitb12, VRAGENLIJST, vWF_plasma, WBC_THAW, Which.femoral.artery,
    Whichoperation, writtenIC, yearablo, yearablo2, yearablo3, yearace, yearace2, yearacet, yearanal, yearanal2, yearanal3, yearangi, yearanta,
    yearanta2, yearanti, yearanti2, yearbblo, yearbblo2, yearcalc, yearcalc2, yearcalreg, yearcarb, yearchol, yearchol2, yearchol3, yearclau1,
    yearclau2, yearclop, yearcom1, yearcom2, yearcom3, yearcort, yearcorthorm2, yearderm, yeardig, yeardig2, yeardig3, yeardig4, yeardipy, yeardiur,
    yeardiur2, yeardiur3, yearerec, yeareye, yeargluc, yeargluc2, yeargluc3, yeargluc4, yeargrel, yearinsu, yeariron, yeariron2, yearneur, yearneur2,
    yearneur3, yearneur4, yearnitr, yearnitr2, yearOR_bin_2010, YearOR_per2years, yearotant, yearotcor, yearoth2, yearothe, yearpros, yearpsy5,
    yearren, yearresp, yearrheu, yearrheu2, yearrheu3, yearsta2, yearstat, yearthro, yearthyr, yearthyr2, yearvit2, yearvita, Yrs.no.smoking,
    Yrs.smoking
AEDB.CEA$yeartemp <- as.numeric(year(AEDB.CEA$dateok))
AEDB.CEA[,"ORyearGroup"] <- NA
AEDB.CEA$ORyearGroup[yeartemp <= 2007] <- "< 2007"
AEDB.CEA$ORyearGroup[yeartemp > 2007] <- "> 2007"
detach(AEDB.CEA)

table(AEDB.CEA$ORyearGroup, AEDB.CEA$ORdate_year)
        
         2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
  < 2007   81  157  190  185  183  152    0    0    0    0    0    0    0    0    0    0    0    0
  > 2007    0    0    0    0    0    0  138  182  159  164  176  149  163   76   85   65   66   52

MCP1 plaque levels vs. plaque vulnerability index

  1. Could you please also provide the figure showing MCP1 levels by symptomatic/asymptomatic plaque, separated in men and women and with the same color code like the other ones (e.g. like the one by age)?
  2. Similarly, I would like to see a figure with the MCP1 levels (again by sex) across the values of the vulnerability index score (0,1,2,3,4,5). By the way this analysis came up very nicely!!
# Global test
compare_means(MCP1_pg_ml_2015_rank ~ Plaque_Vulnerability_Index,  data = AEDB.CEA, method = "kruskal.test")
p1 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 2)",
                  color = "Plaque_Vulnerability_Index",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format",  method = "kruskal.test")
ggpar(p1, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp2_pgmL.PlaqueVulnerabilityIndex.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Plaque_Vulnerability_Index, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
p2 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Plaque vulnerability index by gender",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 2)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "kruskal.test")
ggpar(p2, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp2_pgmL.PlaqueVulnerabilityIndex.byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_rank ~ Plaque_Vulnerability_Index,  data = AEDB.CEA, method = "kruskal.test")
p3 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 1)",
                  color = "Plaque_Vulnerability_Index",
                  palette = "npg",
                  add = "jitter") +
  stat_compare_means(label = "p.format",  method = "kruskal.test")
ggpar(p3, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp1_pgmL.PlaqueVulnerabilityIndex.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_rank ~ Plaque_Vulnerability_Index, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
p4 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 1)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "kruskal.test")
ggpar(p4, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp1_pgmL.PlaqueVulnerabilityIndex.byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Plaque_Vulnerability_Index, data = AEDB.CEA, method = "kruskal.test")
p5 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 2)",
                  color = "Plaque_Vulnerability_Index",
                  palette = "npg",
                  facet.by = "ORyearGroup",
                  add = "jitter") +
  stat_compare_means(label = "p.format",  method = "kruskal.test")
ggpar(p5, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp2_pgmL.PlaqueVulnerabilityIndex_Facet_byYear.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_pg_ml_2015_rank ~ Plaque_Vulnerability_Index, group.by = "Gender", data = AEDB.CEA, method = "kruskal.test")
p6 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_pg_ml_2015_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 2)",
                  color = "Gender",
                  palette = c("#D5267B", "#1290D9"),
                  facet.by = "ORyearGroup",
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "kruskal.test")
ggpar(p6, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp2_pgmL.PlaqueVulnerabilityIndex_Facet_byYear.byGender.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_rank ~ Plaque_Vulnerability_Index,  data = AEDB.CEA, method = "kruskal.test")
p7 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 1)",
                  color = "Plaque_Vulnerability_Index",
                  palette = "npg",
                  facet.by = "ORyearGroup",
                  add = "jitter") +
  stat_compare_means(label = "p.format",  method = "kruskal.test")
ggpar(p7, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp1_pgmL.PlaqueVulnerabilityIndex_Facet_byYear.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

compare_means(MCP1_rank ~ Plaque_Vulnerability_Index, group.by = "Gender",   data = AEDB.CEA, method = "kruskal.test")
p8 <- ggpubr::ggboxplot(AEDB.CEA, 
                  x = "Plaque_Vulnerability_Index",
                  y = "MCP1_rank", 
                  xlab = "Plaque vulnerability index",
                  ylab = "MCP1 plaque [pg/mL]\n(INT, exp 1)",
                  color = "Gender",
                  palette = "npg",
                  facet.by = "ORyearGroup",
                  add = "jitter") +
  stat_compare_means(aes(group = Gender), label = "p.format",  method = "kruskal.test")
ggpar(p8, legend = "bottom", legend.title = "Plaque vulnerability index")
ggsave(filename = paste0(PLOT_loc, "/", Today, ".MCP1.plaque.exp1_pgmL.PlaqueVulnerabilityIndex_Facet_byYear.pdf"), plot = last_plot())
Saving 7.29 x 4.51 in image

Model 1

In this model we correct for Age, Gender, and year of surgery.

Here we use the inverse-rank normalized data - visually this is more normally distributed.

Analysis of the plaque vulnerability indez as a function of plaque MCP1 levels.

TRAITS.PROTEIN.RANK.extra = c("MCP1_pg_ml_2015_rank",  "MCP1_rank")

GLM.results <- data.frame(matrix(NA, ncol = 16, nrow = 0))
for (protein in 1:length(TRAITS.PROTEIN.RANK.extra)) {
  PROTEIN = TRAITS.PROTEIN.RANK.extra[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  TRAIT = "Plaque_Vulnerability_Index"
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M1, ORdate_epoch) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.))) %>%
      droplevels(.)
    
    # fix numeric OR year
    currentDF$ORdate_year <- as.numeric(currentDF$ORdate_year)
    
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    # table(currentDF$ORdate_year)
    ### univariate
     # + Hypertension.composite + DiabetesStatus + SmokerCurrent + 
     #            Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + 
     #            CAD_history + Stroke_history + Peripheral.interv + stenose
    fit <- polr(currentDF[,TRAIT] ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year, 
              data  =  currentDF, 
              Hess = TRUE)
    print(summary(fit))
    
    ## store table
    (ctable <- coef(summary(fit)))

    ## calculate and store p values
    p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
    
    ## combined table
    print((ctable <- cbind(ctable, "p value" = p)))
  }

Analysis of MCP1_pg_ml_2015_rank.

- processing Plaque_Vulnerability_Index

Call:
polr(formula = currentDF[, TRAIT] ~ currentDF[, PROTEIN] + Age + 
    Gender + ORdate_year, data = currentDF, Hess = TRUE)

Coefficients:
                        Value Std. Error  t value
currentDF[, PROTEIN]  0.41240  0.0532549    7.744
Age                   0.01012  0.0064653    1.565
Gendermale            0.64970  0.1152482    5.637
ORdate_year          -0.19973  0.0002414 -827.253

Intercepts:
    Value       Std. Error  t value    
0|1   -402.2399      0.0041 -99035.6337
1|2   -400.8099      0.0927  -4325.4751
2|3   -399.5923      0.1060  -3770.4678
3|4   -398.0243      0.1241  -3208.1030
4|5   -396.2918      0.1820  -2177.0530

Residual Deviance: 3747.495 
AIC: 3765.495 
                             Value  Std. Error       t value      p value
currentDF[, PROTEIN]    0.41239580 0.053254882      7.743812 9.647956e-15
Age                     0.01011714 0.006465267      1.564844 1.176194e-01
Gendermale              0.64969713 0.115248205      5.637373 1.726638e-08
ORdate_year            -0.19972707 0.000241434   -827.253368 0.000000e+00
0|1                  -402.23986657 0.004061567 -99035.633734 0.000000e+00
1|2                  -400.80988917 0.092662628  -4325.475103 0.000000e+00
2|3                  -399.59229384 0.105979499  -3770.467849 0.000000e+00
3|4                  -398.02428156 0.124068422  -3208.103031 0.000000e+00
4|5                  -396.29182977 0.182031319  -2177.053001 0.000000e+00

Analysis of MCP1_rank.

- processing Plaque_Vulnerability_Index

Call:
polr(formula = currentDF[, TRAIT] ~ currentDF[, PROTEIN] + Age + 
    Gender + ORdate_year, data = currentDF, Hess = TRUE)

Coefficients:
                       Value Std. Error t value
currentDF[, PROTEIN] 0.57914   0.081983   7.064
Age                  0.01674   0.010018   1.671
Gendermale           0.67004   0.173922   3.853
ORdate_year          0.11245   0.000364 308.898

Intercepts:
    Value      Std. Error t value   
0|1   223.5627     0.0048 46996.7054
1|2   225.2892     0.1979  1138.6231
2|3   226.6480     0.2156  1051.2929
3|4   228.3111     0.2372   962.6942
4|5   229.9356     0.2885   796.9079

Residual Deviance: 1682.273 
AIC: 1700.273 
                            Value   Std. Error      t value      p value
currentDF[, PROTEIN]   0.57914246 0.0819826492     7.064208 1.615350e-12
Age                    0.01674476 0.0100184222     1.671396 9.464339e-02
Gendermale             0.67004219 0.1739220743     3.852543 1.168977e-04
ORdate_year            0.11245196 0.0003640419   308.898413 0.000000e+00
0|1                  223.56270905 0.0047569868 46996.705379 0.000000e+00
1|2                  225.28918133 0.1978610688  1138.623089 0.000000e+00
2|3                  226.64797644 0.2155897515  1051.292906 0.000000e+00
3|4                  228.31109569 0.2371584838   962.694195 0.000000e+00
4|5                  229.93564186 0.2885347906   796.907858 0.000000e+00

Model 2

In this model we correct for Age, Gender, Hypertension status, Diabetes status, current smoker status, lipid-lowering drugs (LLDs), antiplatelet medication, eGFR (MDRD), BMI, MedHx_CVD (combination of CAD history, stroke history, and peripheral interventions), and stenosis..


for (protein in 1:length(TRAITS.PROTEIN.RANK.extra)) {
  PROTEIN = TRAITS.PROTEIN.RANK.extra[protein]
  cat(paste0("\nAnalysis of ",PROTEIN,".\n"))
  TRAIT = "Plaque_Vulnerability_Index"
    cat(paste0("\n- processing ",TRAIT,"\n\n"))
    currentDF <- as.data.frame(AEDB.CEA %>%
      dplyr::select(., PROTEIN, TRAIT, COVARIATES_M2) %>%
      filter(complete.cases(.))) %>%
      filter_if(~is.numeric(.), all_vars(!is.infinite(.))) %>%
      droplevels(.)
    
    # fix numeric OR year
    currentDF$ORdate_year <- as.numeric(currentDF$ORdate_year)
    
    # for debug
    # print(DT::datatable(currentDF))
    # print(nrow(currentDF))
    # print(str(currentDF))
    # print(class(currentDF[,TRAIT]))
    ### univariate

    fit <- polr(as.factor(currentDF[,TRAIT]) ~ currentDF[,PROTEIN] + Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + BMI + MedHx_CVD + stenose,
              data  =  currentDF,
              Hess = TRUE)
    
    print(summary(fit))
    
    ## store table
    (ctable <- coef(summary(fit)))

    ## calculate and store p values
    p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
    
    ## combined table
    print((ctable <- cbind(ctable, "p value" = p)))
  }

Analysis of MCP1_pg_ml_2015_rank.

- processing Plaque_Vulnerability_Index

Call:
polr(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF, Hess = TRUE)

Coefficients:
                              Value Std. Error   t value
currentDF[, PROTEIN]       0.418370  0.0579871    7.2149
Age                        0.005896  0.0120649    0.4887
Gendermale                 0.662747  0.1286571    5.1513
ORdate_year               -0.211763  0.0008317 -254.6074
Hypertension.compositeyes -0.131494  0.1741966   -0.7549
DiabetesStatusDiabetes    -0.136239  0.1374964   -0.9909
SmokerStatusEx-smoker      0.084901  0.1295999    0.6551
SmokerStatusNever smoked   0.552791  0.1842708    2.9999
Med.Statin.LLDyes          0.100217  0.1448559    0.6918
Med.all.antiplateletyes   -0.062565  0.2065019   -0.3030
GFR_MDRD                  -0.002856  0.0040793   -0.7002
BMI                       -0.003863  0.0236201   -0.1635
MedHx_CVDyes               0.161993  0.1179045    1.3739
stenose50-70%             -0.667972  0.1575696   -4.2392
stenose70-90%             -0.645306  0.0951343   -6.7831
stenose90-99%             -0.796388  0.0979339   -8.1319
stenose100% (Occlusion)   -1.570633  0.0108586 -144.6441
stenose50-99%             -1.263311  0.0065156 -193.8893
stenose70-99%             -1.199791  0.0071226 -168.4488

Intercepts:
    Value      Std. Error t value   
0|1  -427.6886     0.0602 -7103.1843
1|2  -426.1533     0.1353 -3148.7832
2|3  -424.9137     0.1520 -2795.1793
3|4  -423.3275     0.1490 -2840.3173
4|5  -421.6368     0.1983 -2126.3969

Residual Deviance: 3217.477 
AIC: 3265.477 
                                  Value   Std. Error       t value      p value
currentDF[, PROTEIN]       4.183699e-01 0.0579870631     7.2148842 5.397987e-13
Age                        5.896199e-03 0.0120649241     0.4887059 6.250499e-01
Gendermale                 6.627466e-01 0.1286570869     5.1512641 2.587365e-07
ORdate_year               -2.117629e-01 0.0008317231  -254.6074325 0.000000e+00
Hypertension.compositeyes -1.314941e-01 0.1741966173    -0.7548602 4.503328e-01
DiabetesStatusDiabetes    -1.362392e-01 0.1374964136    -0.9908561 3.217558e-01
SmokerStatusEx-smoker      8.490072e-02 0.1295998539     0.6550989 5.124041e-01
SmokerStatusNever smoked   5.527907e-01 0.1842707752     2.9998828 2.700835e-03
Med.Statin.LLDyes          1.002173e-01 0.1448559028     0.6918414 4.890369e-01
Med.all.antiplateletyes   -6.256453e-02 0.2065019313    -0.3029731 7.619103e-01
GFR_MDRD                  -2.856430e-03 0.0040792856    -0.7002280 4.837850e-01
BMI                       -3.862761e-03 0.0236200979    -0.1635370 8.700956e-01
MedHx_CVDyes               1.619931e-01 0.1179045387     1.3739348 1.694619e-01
stenose50-70%             -6.679723e-01 0.1575695959    -4.2392205 2.242973e-05
stenose70-90%             -6.453059e-01 0.0951342876    -6.7831058 1.176194e-11
stenose90-99%             -7.963882e-01 0.0979338596    -8.1318987 4.226178e-16
stenose100% (Occlusion)   -1.570633e+00 0.0108586007  -144.6441313 0.000000e+00
stenose50-99%             -1.263311e+00 0.0065156313  -193.8892920 0.000000e+00
stenose70-99%             -1.199791e+00 0.0071225894  -168.4487660 0.000000e+00
0|1                       -4.276886e+02 0.0602108239 -7103.1843330 0.000000e+00
1|2                       -4.261533e+02 0.1353390471 -3148.7832306 0.000000e+00
2|3                       -4.249137e+02 0.1520165995 -2795.1793305 0.000000e+00
3|4                       -4.233275e+02 0.1490423213 -2840.3173304 0.000000e+00
4|5                       -4.216368e+02 0.1982869504 -2126.3969333 0.000000e+00

Analysis of MCP1_rank.

- processing Plaque_Vulnerability_Index

Call:
polr(formula = as.factor(currentDF[, TRAIT]) ~ currentDF[, PROTEIN] + 
    Age + Gender + ORdate_year + Hypertension.composite + DiabetesStatus + 
    SmokerStatus + Med.Statin.LLD + Med.all.antiplatelet + GFR_MDRD + 
    BMI + MedHx_CVD + stenose, data = currentDF, Hess = TRUE)

Coefficients:
                              Value Std. Error t value
currentDF[, PROTEIN]       0.582091  0.0870366  6.6879
Age                        0.007899  0.0148627  0.5315
Gendermale                 0.752179  0.1888165  3.9836
ORdate_year                0.072517  0.0009023 80.3660
Hypertension.compositeyes  0.297669  0.2500139  1.1906
DiabetesStatusDiabetes    -0.225881  0.2116702 -1.0671
SmokerStatusEx-smoker     -0.099253  0.1832088 -0.5418
SmokerStatusNever smoked   0.325615  0.2747025  1.1853
Med.Statin.LLDyes          0.171944  0.1984399  0.8665
Med.all.antiplateletyes   -0.117527  0.2979384 -0.3945
GFR_MDRD                  -0.004244  0.0052909 -0.8020
BMI                        0.034714  0.0266318  1.3035
MedHx_CVDyes               0.198649  0.1726682  1.1505
stenose50-70%              0.067700  0.0182550  3.7086
stenose70-90%              0.743339  0.0875836  8.4872
stenose90-99%              0.631206  0.0878806  7.1825
stenose100% (Occlusion)    0.952212  0.0303750 31.3486

Intercepts:
    Value     Std. Error t value  
0|1  144.6067    0.0362  3990.9743
1|2  146.3445    0.2214   660.9133
2|3  147.7665    0.2540   581.8450
3|4  149.3776    0.2662   561.0606
4|5  151.0046    0.3050   495.0780

Residual Deviance: 1504.004 
AIC: 1548.004 
                                  Value   Std. Error      t value       p value
currentDF[, PROTEIN]        0.582091419 0.0870365671    6.6878950  2.264035e-11
Age                         0.007898933 0.0148627060    0.5314600  5.951001e-01
Gendermale                  0.752178825 0.1888165035    3.9836498  6.786486e-05
ORdate_year                 0.072516969 0.0009023344   80.3659565  0.000000e+00
Hypertension.compositeyes   0.297668763 0.2500138827    1.1906089  2.338071e-01
DiabetesStatusDiabetes     -0.225880837 0.2116701594   -1.0671360  2.859104e-01
SmokerStatusEx-smoker      -0.099253443 0.1832088094   -0.5417504  5.879905e-01
SmokerStatusNever smoked    0.325614749 0.2747025317    1.1853358  2.358847e-01
Med.Statin.LLDyes           0.171943503 0.1984399313    0.8664763  3.862290e-01
Med.all.antiplateletyes    -0.117527397 0.2979383769   -0.3944688  6.932349e-01
GFR_MDRD                   -0.004243556 0.0052909466   -0.8020411  4.225292e-01
BMI                         0.034713834 0.0266318281    1.3034717  1.924138e-01
MedHx_CVDyes                0.198649091 0.1726681767    1.1504673  2.499515e-01
stenose50-70%               0.067699597 0.0182549767    3.7085556  2.084449e-04
stenose70-90%               0.743338980 0.0875835961    8.4871941  2.116860e-17
stenose90-99%               0.631205945 0.0878805931    7.1825408  6.842763e-13
stenose100% (Occlusion)     0.952212176 0.0303749713   31.3485786 1.017278e-215
0|1                       144.606657777 0.0362334225 3990.9742906  0.000000e+00
1|2                       146.344455249 0.2214276176  660.9132899  0.000000e+00
2|3                       147.766496279 0.2539619705  581.8449747  0.000000e+00
3|4                       149.377587074 0.2662414694  561.0605568  0.000000e+00
4|5                       151.004647042 0.3050118314  495.0779986  0.000000e+00

Session information


Version:      v1.0.17
Last update:  2020-07-14
Written by:   Sander W. van der Laan (s.w.vanderlaan-2[at]umcutrecht.nl).
Description:  Script to analyse MCP1 from the Ather-Express Biobank Study.
Minimum requirements: R version 3.5.2 (2018-12-20) -- 'Eggshell Igloo', macOS Mojave (10.14.2).

**MoSCoW To-Do List**
The things we Must, Should, Could, and Would have given the time we have.
_M_

_S_

_C_


_W_


**Changes log**
* v1.0.17 Added regular, and per gender boxplots for risk factors, _etc_. Changed coloring for consistency. 
* v1.0.16 Create a pg/mL-only version. Switched to a new `.RMD`, but kept versioning.
* v1.0.15 Add sex-stratified plots for MCP1 plaque levels by symptoms and plaque vulnerability index.
* v1.0.14 Add analysis on plasma based MCP1 levels measured through OLINK, n ± 700, limited to symptomatic patients only.
* v1.0.13 Splitting RMDs into plaque-focused, and one including plasma levels of MCP1.
* v1.0.12 Add boxplots of MCP1 levels stratified by confounder/variables.
* v1.0.11 Add analysis of pilot data comparing OLINK-platform based MCP1 levels in plasma and plaque.
* v1.0.10 Add analyses for all three `MCP1`, `MCP1_pg_ml_2015`, and `MCP1_pg_ug_2015`. Add comparison between `MCP1`, `MCP1_pg_ml_2015`, and `MCP1_pg_ug_2015`. Add (and fixed) ordinal regression. Double checked which measurement to use. 
* v1.0.9 Added linear regression models for MCP1 vs. cytokines plaque levels. Double checked upload of MACE-plots. Added statistics from correlation (heatmap) to txt-file.
* v1.0.8 Fixed error in MCP1 plasma analysis. It turns out the `MCP1` and `MCP1_pg_ug_2015` variables are _both_ measured in plaque, in two separate experiments, exp. no. 1 and exp. no. 2, respectively. 
* v1.0.7 Fixed the per Age-group MCP1 Box plots. Added correlations with other cytokines in plaques.
* v1.0.6 Only analyses and figures that end up in the final manuscript.
* v1.0.5 Update with 30- and 90-days survival.
* v1.0.4 Updated with Cox-regressions.
* v1.0.3 Included more models.
* v1.0.2 Bugs fixed.
* v1.0.1 Extended with linear and logistic regressions.
* v1.0.0 Inital version.

sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin19.4.0 (64-bit)
Running under: macOS Catalina 10.15.5

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /usr/local/Cellar/openblas/0.3.10/lib/libopenblasp-r0.3.10.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] GGally_1.5.0               PerformanceAnalytics_2.0.4 xts_0.12-0                 zoo_1.8-8                  ggcorrplot_0.1.3.999       Hmisc_4.4-0               
 [7] Formula_1.2-3              lattice_0.20-41            survminer_0.4.6            survival_3.1-12            patchwork_1.0.1.9000       openxlsx_4.1.5            
[13] ggpubr_0.3.0               tableone_0.11.1            labelled_2.4.0             sjPlot_2.8.4               sjlabelled_1.1.5           haven_2.3.0               
[19] devtools_2.3.0             usethis_1.6.1              MASS_7.3-51.6              DT_0.13                    knitr_1.28                 forcats_0.5.0             
[25] stringr_1.4.0              purrr_0.3.4                tibble_3.0.1               ggplot2_3.3.0              tidyverse_1.3.0            data.table_1.12.8         
[31] naniar_0.5.1               tidyr_1.1.0                dplyr_0.8.5                optparse_1.6.6             readr_1.3.1               

loaded via a namespace (and not attached):
  [1] readxl_1.3.1        backports_1.1.7     plyr_1.8.6          splines_3.6.3       crosstalk_1.1.0.1   TH.data_1.0-10      inline_0.3.15       digest_0.6.25      
  [9] htmltools_0.4.0     fansi_0.4.1         checkmate_2.0.0     magrittr_1.5        memoise_1.1.0       cluster_2.1.0       remotes_2.1.1       modelr_0.1.8       
 [17] matrixStats_0.56.0  sandwich_2.5-1      prettyunits_1.1.1   jpeg_0.1-8.1        colorspace_1.4-1    rvest_0.3.5         mitools_2.4         xfun_0.14          
 [25] callr_3.4.3         crayon_1.3.4        jsonlite_1.6.1      lme4_1.1-23         glue_1.4.1          gtable_0.3.0        emmeans_1.4.7       sjstats_0.18.0     
 [33] sjmisc_2.8.4        car_3.0-8           pkgbuild_1.0.8      rstan_2.19.3        abind_1.4-5         scales_1.1.1        mvtnorm_1.1-0       DBI_1.1.0          
 [41] rstatix_0.5.0.999   ggeffects_0.14.3    Rcpp_1.0.4.6        htmlTable_1.13.3    xtable_1.8-4        performance_0.4.6   foreign_0.8-75      km.ci_0.5-2        
 [49] stats4_3.6.3        StanHeaders_2.19.2  survey_4.0          htmlwidgets_1.5.1   httr_1.4.1          getopt_1.20.3       RColorBrewer_1.1-2  acepack_1.4.1      
 [57] ellipsis_0.3.1      reshape_0.8.8       farver_2.0.3        pkgconfig_2.0.3     loo_2.2.0           nnet_7.3-14         dbplyr_1.4.3        reshape2_1.4.4     
 [65] tidyselect_1.1.0    labeling_0.3        rlang_0.4.6         effectsize_0.3.1    munsell_0.5.0       cellranger_1.1.0    cli_2.0.2           generics_0.0.2     
 [73] broom_0.5.6         evaluate_0.14       yaml_2.2.1          processx_3.4.2      fs_1.4.1            zip_2.0.4           survMisc_0.5.5      visdat_0.5.3       
 [81] nlme_3.1-148        xml2_1.3.2          compiler_3.6.3      rstudioapi_0.11     png_0.1-7           curl_4.3            e1071_1.7-3         testthat_2.3.2     
 [89] ggsignif_0.6.0      reprex_0.3.0        statmod_1.4.34      stringi_1.4.6       ps_1.3.3            parameters_0.7.0    desc_1.2.0          Matrix_1.2-18      
 [97] nloptr_1.2.2.1      KMsurv_0.1-5        ggsci_2.9           vctrs_0.3.0         pillar_1.4.4        lifecycle_0.2.0     estimability_1.3    insight_0.8.4      
[105] latticeExtra_0.6-29 R6_2.4.1            gridExtra_2.3       rio_0.5.16          sessioninfo_1.1.1   codetools_0.2-16    boot_1.3-25         assertthat_0.2.1   
[113] pkgload_1.0.2       rprojroot_1.3-2     withr_2.2.0         multcomp_1.4-13     mgcv_1.8-31         bayestestR_0.6.0    parallel_3.6.3      hms_0.5.3          
[121] quadprog_1.5-8      rpart_4.1-15        grid_3.6.3          class_7.3-17        coda_0.19-3         minqa_1.2.4         rmarkdown_2.1       carData_3.0-4      
[129] lubridate_1.7.8     base64enc_0.1-3    

Saving environment

save.image(paste0(PROJECT_loc, "/",Today,".",PROJECTNAME,".sample_selection.RData"))
© 1979-2020 Sander W. van der Laan | s.w.vanderlaan-2[at]umcutrecht.nl | swvanderlaan.github.io.
LS0tCnRpdGxlOiAiQXRoZXJvLUV4cHJlc3MgQmlvYmFuayBTdHVkeSAtLSBNQ1AxIHBsYXF1ZSBsZXZlbHMgKG4gwrEgMSwxMDA7IFtwZy9tTF0pLiIKYXV0aG9yOiAnW1NhbmRlciBXLiB2YW4gZGVyIExhYW4sIFBoRF0oaHR0cHM6Ly9zd3ZhbmRlcmxhYW4uZ2l0aHViLmlvKSB8IEBzd3ZhbmRlcmxhYW47IE1hcmlvcyBHZW9yZ2FraXM7IFJhaW5lciBNYWxpazsgTWFydGluIERpY2hnYW5zJwpkYXRlOiAnYHIgU3lzLkRhdGUoKWAnCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY2FjaGU6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2xsYXBzZTogeWVzCiAgICBkZl9wcmludDogcGFnZWQKICAgIGZpZy5hbGlnbjogY2VudGVyCiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBmaWdfaGVpZ2h0OiAxMAogICAgZmlnX3JldGluYTogMgogICAgZmlnX3dpZHRoOiAxMgogICAgdGhlbWU6IHBhcGVyCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IG5vCiAgICAgIHNtb290aF9zY3JvbGw6IHllcwptYWluZm9udDogSGVsdmV0aWNhCnN1YnRpdGxlOiBBbiAnQXRoZXJvLUV4cHJlc3MgQmlvYmFuayBTdHVkeScgcHJvamVjdAplZGl0b3Jfb3B0aW9uczoKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZBTFNFfQojIGZ1cnRoZXIgZGVmaW5lIHNvbWUga25pdHItb3B0aW9ucy4Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDEyLCBmaWcuaGVpZ2h0ID0gOCwgZmlnLnBhdGggPSAnRmlndXJlcy8nLAogICAgICAgICAgICAgICAgICAgICAgZXZhbCA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCiMgUHJlcGFyYXRpb24KCkNsZWFuIHRoZSBlbnZpcm9ubWVudC4KYGBge3IgQ2xlYXJFbnZpcm9ubWVudCwgaW5jbHVkZSA9IEZBTFNFfQpybShsaXN0ID0gbHMoKSkKYGBgCgpTZXQgbG9jYXRpb25zLCBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgpgYGB7ciBMb2NhbFN5c3RlbSwgaW5jbHVkZSA9IEZBTFNFfQojIyMgT3BlcmF0aW5nIFN5c3RlbSBWZXJzaW9uCiMjIyBNYWMgUHJvCiMgUk9PVF9sb2MgPSAiL1ZvbHVtZXMvRWxpdGVQcm9ReDJNZWRpYSIKIyBHRU5PTUlDX2xvYyA9ICIvVXNlcnMvc3ZhbmRlcmxhYW4vaUNsb3VkL0dlbm9taWNzIgoKIyMjIE1hY0Jvb2sKUk9PVF9sb2MgPSAiL1VzZXJzL3N3dmFuZGVybGFhbiIKR0VOT01JQ19sb2MgPSBwYXN0ZTAoUk9PVF9sb2MsICIvaUNsb3VkL0dlbm9taWNzIikKCiMjIyBHZW5lcmljIExvY2F0aW9ucwpBRURCX2xvYyA9IHBhc3RlMChHRU5PTUlDX2xvYywgIi9BRS1BQUFfR1NfREJzIikKTEFCX2xvYyA9IHBhc3RlMChHRU5PTUlDX2xvYywgIi9MYWJCdXNpbmVzcyIpClJFU1VMVFMgPSBwYXN0ZTAoUk9PVF9sb2MsICIvUExJTksvYW5hbHlzZXMvbG9va3Vwcy9BRV8yMDE5MDkxMl8wMTBfTURJQ0hHQU5TX1NXVkRMQUFOX0lMNl9NQ1AxIikKUkFXREFUQSA9IHBhc3RlMChST09UX2xvYywgIi9QTElOSy9fQUVfT1JJR0lOQUxTL0FFU0NSTkEvcHJlcHBlZF9kYXRhIikKUFJPSkVDVF9sb2MgPSBwYXN0ZTAoUk9PVF9sb2MsICIvUExJTksvYW5hbHlzZXMvbG9va3Vwcy9BRV8yMDE5MDkxMl8wMTBfTURJQ0hHQU5TX1NXVkRMQUFOX0lMNl9NQ1AxIikKCiMjIyBTT01FIFZBUklBQkxFUyBXRSBORUVEIERPV04gVEhFIExJTkUKY2F0KCJcbkRlZmluaW5nIHBoZW5vdHlwZXMgYW5kIGRhdGFzZXRzLlxuIikKUFJPSkVDVE5BTUU9Ik1DUDFfcGdfbUwiCiMgU1VCUFJPSkVDVE5BTUU9IiIKCmNhdCgiXG5DcmVhdGUgYSBuZXcgYW5hbHlzaXMgZGlyZWN0b3J5LCBpbmNsdWRpbmcgc3ViZGlyZWN0b3JpZXMuXG4iKQojIEFuYWx5c2lzCmlmZWxzZSghZGlyLmV4aXN0cyhmaWxlLnBhdGgoUFJPSkVDVF9sb2MsICIvIixQUk9KRUNUTkFNRSkpLCAKICAgICAgIGRpci5jcmVhdGUoZmlsZS5wYXRoKFBST0pFQ1RfbG9jLCAiLyIsUFJPSkVDVE5BTUUpKSwgCiAgICAgICBGQUxTRSkKQU5BTFlTSVNfbG9jID0gcGFzdGUwKFBST0pFQ1RfbG9jLCIvIixQUk9KRUNUTkFNRSkKCiMgUGxvdHMKaWZlbHNlKCFkaXIuZXhpc3RzKGZpbGUucGF0aChBTkFMWVNJU19sb2MsICIvUExPVFMiKSksIAogICAgICAgZGlyLmNyZWF0ZShmaWxlLnBhdGgoQU5BTFlTSVNfbG9jLCAiL1BMT1RTIikpLCAKICAgICAgIEZBTFNFKQpQTE9UX2xvYyA9IHBhc3RlMChBTkFMWVNJU19sb2MsIi9QTE9UUyIpCgojIFFDIHBsb3RzCmlmZWxzZSghZGlyLmV4aXN0cyhmaWxlLnBhdGgoUExPVF9sb2MsICIvUUMiKSksIAogICAgICAgZGlyLmNyZWF0ZShmaWxlLnBhdGgoUExPVF9sb2MsICIvUUMiKSksIAogICAgICAgRkFMU0UpClFDX2xvYyA9IHBhc3RlMChQTE9UX2xvYywiL1FDIikKCiMgT3V0cHV0IGZpbGVzCmlmZWxzZSghZGlyLmV4aXN0cyhmaWxlLnBhdGgoQU5BTFlTSVNfbG9jLCAiL09VVFBVVCIpKSwgCiAgICAgICBkaXIuY3JlYXRlKGZpbGUucGF0aChBTkFMWVNJU19sb2MsICIvT1VUUFVUIikpLCAKICAgICAgIEZBTFNFKQpPVVRfbG9jID0gcGFzdGUwKEFOQUxZU0lTX2xvYywgIi9PVVRQVVQiKQoKIyBDT1ggYW5hbHlzaXMKaWZlbHNlKCFkaXIuZXhpc3RzKGZpbGUucGF0aChBTkFMWVNJU19sb2MsICIvQ09YIikpLCAKICAgICAgIGRpci5jcmVhdGUoZmlsZS5wYXRoKEFOQUxZU0lTX2xvYywgIi9DT1giKSksIAogICAgICAgRkFMU0UpCkNPWF9sb2MgPSBwYXN0ZTAoQU5BTFlTSVNfbG9jLCAiL0NPWCIpCgojIEJhc2VsaW5lIGNoYXJhY3RlcmlzdGljcwppZmVsc2UoIWRpci5leGlzdHMoZmlsZS5wYXRoKEFOQUxZU0lTX2xvYywgIi9CQVNFTElORSIpKSwgCiAgICAgICBkaXIuY3JlYXRlKGZpbGUucGF0aChBTkFMWVNJU19sb2MsICIvQkFTRUxJTkUiKSksIAogICAgICAgRkFMU0UpCkJBU0VMSU5FX2xvYyA9IHBhc3RlMChBTkFMWVNJU19sb2MsICIvQkFTRUxJTkUiKQoKIyBTYW1wbGUgc2VsZWN0aW9uCmlmZWxzZSghZGlyLmV4aXN0cyhmaWxlLnBhdGgoQU5BTFlTSVNfbG9jLCAiL1NFTEVDVElPTlMiKSksIAogICAgICAgZGlyLmNyZWF0ZShmaWxlLnBhdGgoQU5BTFlTSVNfbG9jLCAiL1NFTEVDVElPTlMiKSksIAogICAgICAgRkFMU0UpClNFTEVDVElPTlNfbG9jID0gcGFzdGUwKEFOQUxZU0lTX2xvYywgIi9TRUxFQ1RJT05TIikKCmNhdCgiXG5TZXR0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBsaXN0aW5nIGl0cyBjb250ZW50cy5cbiIpCnNldHdkKHBhc3RlMChQUk9KRUNUX2xvYykpCmdldHdkKCkKbGlzdC5maWxlcygpCmBgYAoKQSBwYWNrYWdlLWluc3RhbGxhdGlvbiBmdW5jdGlvbi4KYGBge3IgRnVuY3Rpb246IGluc3RhbGxhdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0KaW5zdGFsbC5wYWNrYWdlcy5hdXRvIDwtIGZ1bmN0aW9uKHgpIHsgCiAgeCA8LSBhcy5jaGFyYWN0ZXIoc3Vic3RpdHV0ZSh4KSkgCiAgaWYoaXNUUlVFKHggJWluJSAucGFja2FnZXMoYWxsLmF2YWlsYWJsZSA9IFRSVUUpKSkgeyAKICAgIGV2YWwocGFyc2UodGV4dCA9IHNwcmludGYoInJlcXVpcmUoXCIlc1wiKSIsIHgpKSkKICB9IGVsc2UgeyAKICAgICMgVXBkYXRlIGluc3RhbGxlZCBwYWNrYWdlcyAtIHRoaXMgbWF5IG1lYW4gYSBmdWxsIHVwZ3JhZGUgb2YgUiwgd2hpY2ggaW4gdHVybgogICAgIyBtYXkgbm90IGJlIHdhcnJlbnRlZC4gCiAgICAjIHVwZGF0ZS5pbnN0YWxsLnBhY2thZ2VzLmF1dG8oYXNrID0gRkFMU0UpIAogICAgZXZhbChwYXJzZSh0ZXh0ID0gc3ByaW50ZigiaW5zdGFsbC5wYWNrYWdlcyhcIiVzXCIsIGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gXCJodHRwczovL2Nsb3VkLnItcHJvamVjdC5vcmcvXCIpIiwgeCkpKQogIH0KICBpZihpc1RSVUUoeCAlaW4lIC5wYWNrYWdlcyhhbGwuYXZhaWxhYmxlID0gVFJVRSkpKSB7IAogICAgZXZhbChwYXJzZSh0ZXh0ID0gc3ByaW50ZigicmVxdWlyZShcIiVzXCIpIiwgeCkpKQogIH0gZWxzZSB7CiAgICBpZiAoIXJlcXVpcmVOYW1lc3BhY2UoIkJpb2NNYW5hZ2VyIikpCiAgICAgIGluc3RhbGwucGFja2FnZXMoIkJpb2NNYW5hZ2VyIikKICAgICMgQmlvY01hbmFnZXI6Omluc3RhbGwoKSAjIHRoaXMgd291bGQgZW50YWlsIHVwZGF0aW5nIGluc3RhbGxlZCBwYWNrYWdlcywgd2hpY2ggaW4gdHVybmVkIG1heSBub3QgYmUgd2FycmVudGVkCiAgICBldmFsKHBhcnNlKHRleHQgPSBzcHJpbnRmKCJCaW9jTWFuYWdlcjo6aW5zdGFsbChcIiVzXCIpIiwgeCkpKQogICAgZXZhbChwYXJzZSh0ZXh0ID0gc3ByaW50ZigicmVxdWlyZShcIiVzXCIpIiwgeCkpKQogIH0KfQpgYGAKCkxvYWQgdGhvc2UgcGFja2FnZXMuCmBgYHtyIFNldHRpbmc6IGxvYWRpbmdfcGFja2FnZXMsIGluY2x1ZGUgPSBGQUxTRX0KaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJyZWFkciIpCmluc3RhbGwucGFja2FnZXMuYXV0bygib3B0cGFyc2UiKQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oInRvb2xzIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJkcGx5ciIpCmluc3RhbGwucGFja2FnZXMuYXV0bygidGlkeXIiKQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oIm5hbmlhciIpCgojIFRvIGdldCAnZGF0YS50YWJsZScgd2l0aCAnZndyaXRlJyB0byBiZSBhYmxlIHRvIGRpcmVjdGx5IHdyaXRlIGd6aXBwZWQtZmlsZXMKIyBSZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQyNzg4NDAxL2lzLXBvc3NpYmxlLXRvLXVzZS1md3JpdGUtZnJvbS1kYXRhLXRhYmxlLXdpdGgtZ3pmaWxlCiMgaW5zdGFsbC5wYWNrYWdlcygiZGF0YS50YWJsZSIsIHJlcG9zID0gImh0dHBzOi8vUmRhdGF0YWJsZS5naXRsYWIuaW8vZGF0YS50YWJsZSIpCmxpYnJhcnkoZGF0YS50YWJsZSkKCmluc3RhbGwucGFja2FnZXMuYXV0bygidGlkeXZlcnNlIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJrbml0ciIpCmluc3RhbGwucGFja2FnZXMuYXV0bygiRFQiKQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oIk1BU1MiKQojIGluc3RhbGwucGFja2FnZXMuYXV0bygiU2V1cmF0IikgIyBsYXRlc3QgdmVyc2lvbgoKIyBJbnN0YWxsIHRoZSBkZXZ0b29scyBwYWNrYWdlIGZyb20gSGFkbGV5IFdpY2toYW0KaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCdkZXZ0b29scycpCgppbnN0YWxsLnBhY2thZ2VzLmF1dG8oImhhdmVuIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJzamxhYmVsbGVkIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJzalBsb3QiKQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oImxhYmVsbGVkIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJ0YWJsZW9uZSIpCgppbnN0YWxsLnBhY2thZ2VzLmF1dG8oImdncHViciIpCgpgYGAKCldlIHdpbGwgY3JlYXRlIGEgZGF0ZXN0YW1wIGFuZCBkZWZpbmUgdGhlIFV0cmVjaHQgU2NpZW5jZSBQYXJrIENvbG91ciBTY2hlbWUuCmBgYHtyIFNldHRpbmc6IENvbG9ycywgaW5jbHVkZSA9IEZBTFNFfQoKVG9kYXkgPSBmb3JtYXQoYXMuRGF0ZShhcy5QT1NJWGx0KFN5cy50aW1lKCkpKSwgIiVZJW0lZCIpClRvZGF5LlJlcG9ydCA9IGZvcm1hdChhcy5EYXRlKGFzLlBPU0lYbHQoU3lzLnRpbWUoKSkpLCAiJUEsICVCICVkLCAlWSIpCgojIyMgVXRyZWNodFNjaWVuY2VQYXJrQ29sb3Vyc1NjaGVtZQojIyMKIyMjIFdlYnNpdGV0b2NvbnZlcnRIRVh0b1JHQjpodHRwOi8vaGV4LmNvbG9ycnJzLmNvbS4KIyMjIEZvcnNvbWVmdW5jdGlvbnN5b3VzaG91bGRkaXZpZGV0aGVzZW51bWJlcnNieTI1NS4KIyMjIAojIyMJTm8uCUNvbG9yCQkJICAgICAgSEVYCShSR0IpCQkJCQkJICAgICAgICAgICAgICBDSFIJCSAgTUFGL0lORk8KIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMjIwkxCSAgeWVsbG93CQkJICAgICNGQkI4MjAgKDI1MSwxODQsMzIpCQkJCSAgICAgID0+CTEJCW9yIDEuMD5JTkZPCiMjIwkyCSAgZ29sZAkJCSAgICAgICNGNTlEMTAgKDI0NSwxNTcsMTYpCQkJCSAgICAgID0+CTIJCQojIyMJMwkgIHNhbG1vbgkJCSAgICAjRTU1NzM4ICgyMjksODcsNTYpCQkJCSAgICAgID0+CTMJCW9yIDAuMDU8TUFGPDAuMiBvciAwLjQ8SU5GTzwwLjYKIyMjCTQJICBkYXJrcGluawkJICAgICNEQjAwM0YgKCgyMTksMCw2MykJCQkJICAgICAgPT4JNAkJCiMjIwk1CSAgbGlnaHRwaW5rCQkgICAgI0UzNTQ5MyAoMjI3LDg0LDE0NykJCQkJICAgICAgPT4JNQkJb3IgMC44PElORk88MS4wCiMjIwk2CSAgcGluawkJCSAgICAgICNENTI2N0IgKDIxMywzOCwxMjMpCQkJCSAgICAgID0+CTYJCQojIyMJNwkgIGhhcmRwaW5rCQkgICAgI0NDMDA3MSAoMjA0LDAsMTEzKQkJCQkgICAgICA9Pgk3CQkKIyMjCTgJICBsaWdodHB1cnBsZQkgICAgI0E4NDQ4QSAoMTY4LDY4LDEzOCkJCQkJICAgICAgPT4JOAkJCiMjIwk5CSAgcHVycGxlCQkJICAgICM5QTM0ODAgKDE1NCw1MiwxMjgpCQkJCSAgICAgID0+CTkJCQojIyMJMTAJbGF2ZW5kZWwJCSAgICAjOEQ1QjlBICgxNDEsOTEsMTU0KQkJCQkgICAgICA9PgkxMAkJCiMjIwkxMQlibHVlcHVycGxlCQkgICM3MDUyOTYgKDExMiw4MiwxNTApCQkJCSAgICAgID0+CTExCQkKIyMjCTEyCXB1cnBsZWJsdWUJCSAgIzY4NkFBOSAoMTA0LDEwNiwxNjkpCQkJICAgICAgPT4JMTIJCQojIyMJMTMJbGlnaHRwdXJwbGVibHVlCSM2MTczQUQgKDk3LDExNSwxNzMvMTAxLDEyMCwxODApCT0+CTEzCQkKIyMjCTE0CXNlYWJsdWUJCQkgICAgIzRDODFCRiAoNzYsMTI5LDE5MSkJCQkJICAgICAgPT4JMTQJCQojIyMJMTUJc2t5Ymx1ZQkJCSAgICAjMkY4QkM5ICg0NywxMzksMjAxKQkJCQkgICAgICA9PgkxNQkJCiMjIwkxNglhenVyYmx1ZQkJICAgICMxMjkwRDkgKDE4LDE0NCwyMTcpCQkJCSAgICAgID0+CTE2CQlvciAwLjAxPE1BRjwwLjA1IG9yIDAuMjxJTkZPPDAuNAojIyMJMTcJbGlnaHRhenVyYmx1ZQkgICMxMzk2RDggKDE5LDE1MCwyMTYpCQkJCSAgICAgID0+CTE3CQkKIyMjCTE4CWdyZWVuYmx1ZQkJICAgICMxNUE2QzEgKDIxLDE2NiwxOTMpCQkJCSAgICAgID0+CTE4CQkKIyMjCTE5CXNlYXdlZWRncmVlbgkgICM1RUIxN0YgKDk0LDE3NywxMjcpCQkJCSAgICAgID0+CTE5CQkKIyMjCTIwCXllbGxvd2dyZWVuCQkgICM4NkI4MzMgKDEzNCwxODQsNTEpCQkJCSAgICAgID0+CTIwCQkKIyMjCTIxCWxpZ2h0bW9zc2dyZWVuCSNDNUQyMjAgKDE5NywyMTAsMzIpCQkJCSAgICAgID0+CTIxCQkKIyMjCTIyCW1vc3NncmVlbgkJICAgICM5RkMyMjggKDE1OSwxOTQsNDApCQkJCSAgICAgID0+CTIyCQlvciBNQUY+MC4yMCBvciAwLjY8SU5GTzwwLjgKIyMjCTIzCWxpZ2h0Z3JlZW4JICAJIzc4QjExMyAoMTIwLDE3NywxOSkJCQkJICAgICAgPT4JMjMvWAojIyMJMjQJZ3JlZW4JCQkgICAgICAjNDlBMDFEICg3MywxNjAsMjkpCQkJCSAgICAgID0+CTI0L1kKIyMjCTI1CWdyZXkJCQkgICAgICAjNTk1QTVDICg4OSw5MCw5MikJCQkJICAgICAgICA9PgkyNS9YWQlvciBNQUY8MC4wMSBvciAwLjA8SU5GTzwwLjIKIyMjCTI2CWxpZ2h0Z3JleQkJICAgICNBMkEzQTQJKDE2MiwxNjMsMTY0KQkJCSAgICAgID0+CTI2L01UCiMjIwojIyMJQURESVRJT05BTCBDT0xPUlMKIyMjCTI3CW1pZGdyZXkJCQkjRDdEOEQ3CiMjIwkyOAl2ZXJ5bGlnaHRncmV5CSNFQ0VDRUMiCiMjIwkyOQl3aGl0ZQkJCSNGRkZGRkYKIyMjCTMwCWJsYWNrCQkJIzAwMDAwMAojIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1aXRob2ZfY29sb3IgPSBjKCIjRkJCODIwIiwiI0Y1OUQxMCIsIiNFNTU3MzgiLCIjREIwMDNGIiwiI0UzNTQ5MyIsIiNENTI2N0IiLAogICAgICAgICAgICAgICAgICIjQ0MwMDcxIiwiI0E4NDQ4QSIsIiM5QTM0ODAiLCIjOEQ1QjlBIiwiIzcwNTI5NiIsIiM2ODZBQTkiLAogICAgICAgICAgICAgICAgICIjNjE3M0FEIiwiIzRDODFCRiIsIiMyRjhCQzkiLCIjMTI5MEQ5IiwiIzEzOTZEOCIsIiMxNUE2QzEiLAogICAgICAgICAgICAgICAgICIjNUVCMTdGIiwiIzg2QjgzMyIsIiNDNUQyMjAiLCIjOUZDMjI4IiwiIzc4QjExMyIsIiM0OUEwMUQiLAogICAgICAgICAgICAgICAgICIjNTk1QTVDIiwiI0EyQTNBNCIsICIjRDdEOEQ3IiwgIiNFQ0VDRUMiLCAiI0ZGRkZGRiIsICIjMDAwMDAwIikKCnVpdGhvZl9jb2xvcl9sZWdlbmQgPSBjKCIjRkJCODIwIiwgIiNGNTlEMTAiLCAiI0U1NTczOCIsICIjREIwMDNGIiwgIiNFMzU0OTMiLAogICAgICAgICAgICAgICAgICAgICAgICAiI0Q1MjY3QiIsICIjQ0MwMDcxIiwgIiNBODQ0OEEiLCAiIzlBMzQ4MCIsICIjOEQ1QjlBIiwKICAgICAgICAgICAgICAgICAgICAgICAgIiM3MDUyOTYiLCAiIzY4NkFBOSIsICIjNjE3M0FEIiwgIiM0QzgxQkYiLCAiIzJGOEJDOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICIjMTI5MEQ5IiwgIiMxMzk2RDgiLCAiIzE1QTZDMSIsICIjNUVCMTdGIiwgIiM4NkI4MzMiLAogICAgICAgICAgICAgICAgICAgICAgICAiI0M1RDIyMCIsICIjOUZDMjI4IiwgIiM3OEIxMTMiLCAiIzQ5QTAxRCIsICIjNTk1QTVDIiwKICAgICAgICAgICAgICAgICAgICAgICAgIiNBMkEzQTQiLCAiI0Q3RDhENyIsICIjRUNFQ0VDIiwgIiNGRkZGRkYiLCAiIzAwMDAwMCIpCgojZ2dwbG90MiBkZWZhdWx0IGNvbG9yIHBhbGV0dGUKZ2dfY29sb3JfaHVlIDwtIGZ1bmN0aW9uKG4pIHsKICBodWVzID0gc2VxKDE1LCAzNzUsIGxlbmd0aCA9IG4gKyAxKQogIGhjbChoID0gaHVlcywgbCA9IDY1LCBjID0gMTAwKVsxOm5dCn0KCiMjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmBgYAoKCmBgYHtyIEFuYWx5c2lzIEZ1bmN0aW9uc30KIyBGdW5jdGlvbiB0byBncmVwIGRhdGEgZnJvbSBnbG0oKS9sbSgpCkdMTS5DT04gPC0gZnVuY3Rpb24oZml0LCBEQVRBU0VULCB4X25hbWUsIHksIHZlcmJvc2U9YyhUUlVFLEZBTFNFKSl7CiAgY2F0KCJBbmFseXppbmcgaW4gZGF0YXNldCAnIiwgREFUQVNFVCAsIicgdGhlIGFzc29jaWF0aW9uIG9mICciLCB4X25hbWUgLCInIHdpdGggJyIsIHkgLCInIC5cbiIpCiAgaWYgKG5yb3coc3VtbWFyeShmaXQpJGNvZWZmaWNpZW50cykgPT0gMSkgewogICAgb3V0cHV0ID0gYyhEQVRBU0VULCB4X25hbWUsIHksIHJlcChOQSw4KSkKICAgIGNhdCgiTW9kZWwgbm90IGZpdHRlZDsgcHJvYmFibHkgc2luZ3VsYXIuXG4iKQogIH1lbHNlIHsKICAgIGNhdCgiQ29sbGVjdGluZyBkYXRhLlxuXG4iKQogICAgZWZmZWN0c2l6ZSA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwxXQogICAgU0UgPSBzdW1tYXJ5KGZpdCkkY29lZmZpY2llbnRzWzIsMl0KICAgIE9SZWZmZWN0ID0gZXhwKHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwxXSkKICAgIENJX2xvdyA9IGV4cChlZmZlY3RzaXplIC0gMS45NiAqIFNFKQogICAgQ0lfdXAgPSBleHAoZWZmZWN0c2l6ZSArIDEuOTYgKiBTRSkKICAgIHR2YWx1ZSA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwzXQogICAgcHZhbHVlID0gc3VtbWFyeShmaXQpJGNvZWZmaWNpZW50c1syLDRdCiAgICBSID0gc3VtbWFyeShmaXQpJHIuc3F1YXJlZAogICAgUi5hZGogPSBzdW1tYXJ5KGZpdCkkYWRqLnIuc3F1YXJlZAogICAgc2FtcGxlX3NpemUgPSBucm93KG1vZGVsLmZyYW1lKGZpdCkpCiAgICBBRV9OID0gQUVEQi5DRUEuc2FtcGxlc2l6ZQogICAgUGVyY19NaXNzID0gMTAwIC0gKChzYW1wbGVfc2l6ZSAqIDEwMCkvQUVfTikKICAgIAogICAgb3V0cHV0ID0gYyhEQVRBU0VULCB4X25hbWUsIHksIGVmZmVjdHNpemUsIFNFLCBPUmVmZmVjdCwgQ0lfbG93LCBDSV91cCwgdHZhbHVlLCBwdmFsdWUsIFIsIFIuYWRqLCBBRV9OLCBzYW1wbGVfc2l6ZSwgUGVyY19NaXNzKQogICAgCiAgICBpZiAodmVyYm9zZSA9PSBUUlVFKSB7CiAgICBjYXQoIldlIGhhdmUgY29sbGVjdGVkIHRoZSBmb2xsb3dpbmcgYW5kIHN1bW1hcml6ZSBpdCBpbiBhbiBvYmplY3Q6XG4iKQogICAgY2F0KCJEYXRhc2V0Li4uLi4uLi4uLi4uLi4uLi4uLjoiLCBEQVRBU0VULCAiXG4iKQogICAgY2F0KCJTY29yZS9FeHBvc3VyZS9iaW9tYXJrZXIuLjoiLCB4X25hbWUsICJcbiIpCiAgICBjYXQoIlRyYWl0L291dGNvbWUuLi4uLi4uLi4uLi4uOiIsIHksICJcbiIpCiAgICBjYXQoIkVmZmVjdCBzaXplLi4uLi4uLi4uLi4uLi4uOiIsIHJvdW5kKGVmZmVjdHNpemUsIDYpLCAiXG4iKQogICAgY2F0KCJTdGFuZGFyZCBlcnJvci4uLi4uLi4uLi4uLjoiLCByb3VuZChTRSwgNiksICJcbiIpCiAgICBjYXQoIk9kZHMgcmF0aW8gKGVmZmVjdCBzaXplKS4uOiIsIHJvdW5kKE9SZWZmZWN0LCAzKSwgIlxuIikKICAgIGNhdCgiTG93ZXIgOTUlIENJLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoQ0lfbG93LCAzKSwgIlxuIikKICAgIGNhdCgiVXBwZXIgOTUlIENJLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoQ0lfdXAsIDMpLCAiXG4iKQogICAgY2F0KCJULXZhbHVlLi4uLi4uLi4uLi4uLi4uLi4uLjoiLCByb3VuZCh0dmFsdWUsIDYpLCAiXG4iKQogICAgY2F0KCJQLXZhbHVlLi4uLi4uLi4uLi4uLi4uLi4uLjoiLCBzaWduaWYocHZhbHVlLCA4KSwgIlxuIikKICAgIGNhdCgiUl4yLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoUiwgNiksICJcbiIpCiAgICBjYXQoIkFkanVzdGVkIHJeMi4uLi4uLi4uLi4uLi4uOiIsIHJvdW5kKFIuYWRqLCA2KSwgIlxuIikKICAgIGNhdCgiU2FtcGxlIHNpemUgb2YgQUUgREIuLi4uLi46IiwgQUVfTiwgIlxuIikKICAgIGNhdCgiU2FtcGxlIHNpemUgb2YgbW9kZWwuLi4uLi46Iiwgc2FtcGxlX3NpemUsICJcbiIpCiAgICBjYXQoIk1pc3NpbmcgZGF0YSAlLi4uLi4uLi4uLi4uOiIsIHJvdW5kKFBlcmNfTWlzcywgNiksICJcbiIpCiAgICB9IGVsc2UgewogICAgICBjYXQoIkNvbGxlY3RpbmcgZGF0YSBpbiBzdW1tYXJ5IG9iamVjdC5cbiIpCiAgICB9CiAgfQogIHJldHVybihvdXRwdXQpCiAgcHJpbnQob3V0cHV0KQp9CgpHTE0uQklOIDwtIGZ1bmN0aW9uKGZpdCwgREFUQVNFVCwgeF9uYW1lLCB5LCB2ZXJib3NlPWMoVFJVRSxGQUxTRSkpewogIGNhdCgiQW5hbHl6aW5nIGluIGRhdGFzZXQgJyIsIERBVEFTRVQgLCInIHRoZSBhc3NvY2lhdGlvbiBvZiAnIiwgeF9uYW1lICwiJyB3aXRoICciLCB5ICwiJyAuLi5cbiIpCiAgaWYgKG5yb3coc3VtbWFyeShmaXQpJGNvZWZmaWNpZW50cykgPT0gMSkgewogICAgb3V0cHV0ID0gYyhEQVRBU0VULCB4X25hbWUsIHksIHJlcChOQSw5KSkKICAgIGNhdCgiTW9kZWwgbm90IGZpdHRlZDsgcHJvYmFibHkgc2luZ3VsYXIuXG4iKQogIH1lbHNlIHsKICAgIGNhdCgiQ29sbGVjdGluZyBkYXRhLi4uXG4iKQogICAgZWZmZWN0c2l6ZSA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwxXQogICAgU0UgPSBzdW1tYXJ5KGZpdCkkY29lZmZpY2llbnRzWzIsMl0KICAgIE9SZWZmZWN0ID0gZXhwKHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwxXSkKICAgIENJX2xvdyA9IGV4cChlZmZlY3RzaXplIC0gMS45NiAqIFNFKQogICAgQ0lfdXAgPSBleHAoZWZmZWN0c2l6ZSArIDEuOTYgKiBTRSkKICAgIHp2YWx1ZSA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiwzXQogICAgcHZhbHVlID0gc3VtbWFyeShmaXQpJGNvZWZmaWNpZW50c1syLDRdCiAgICBkZXYgPC0gZml0JGRldmlhbmNlCiAgICBudWxsRGV2IDwtIGZpdCRudWxsLmRldmlhbmNlCiAgICBtb2RlbE4gPC0gbGVuZ3RoKGZpdCRmaXR0ZWQudmFsdWVzKQogICAgUi5sIDwtIDEgLSBkZXYgLyBudWxsRGV2CiAgICBSLmNzIDwtIDEgLSBleHAoLShudWxsRGV2IC0gZGV2KSAvIG1vZGVsTikKICAgIFIubiA8LSBSLmNzIC8gKDEgLSAoZXhwKC1udWxsRGV2L21vZGVsTikpKQogICAgc2FtcGxlX3NpemUgPSBucm93KG1vZGVsLmZyYW1lKGZpdCkpCiAgICBBRV9OID0gQUVEQi5DRUEuc2FtcGxlc2l6ZQogICAgUGVyY19NaXNzID0gMTAwIC0gKChzYW1wbGVfc2l6ZSAqIDEwMCkvQUVfTikKICAgIAogICAgb3V0cHV0ID0gYyhEQVRBU0VULCB4X25hbWUsIHksIGVmZmVjdHNpemUsIFNFLCBPUmVmZmVjdCwgQ0lfbG93LCBDSV91cCwgenZhbHVlLCBwdmFsdWUsIFIubCwgUi5jcywgUi5uLCBBRV9OLCBzYW1wbGVfc2l6ZSwgUGVyY19NaXNzKQogICAgaWYgKHZlcmJvc2UgPT0gVFJVRSkgewogICAgY2F0KCJXZSBoYXZlIGNvbGxlY3RlZCB0aGUgZm9sbG93aW5nIGFuZCBzdW1tYXJpemUgaXQgaW4gYW4gb2JqZWN0OlxuIikKICAgIGNhdCgiRGF0YXNldC4uLi4uLi4uLi4uLi4uLi4uLi46IiwgREFUQVNFVCwgIlxuIikKICAgIGNhdCgiU2NvcmUvRXhwb3N1cmUvYmlvbWFya2VyLi46IiwgeF9uYW1lLCAiXG4iKQogICAgY2F0KCJUcmFpdC9vdXRjb21lLi4uLi4uLi4uLi4uLjoiLCB5LCAiXG4iKQogICAgY2F0KCJFZmZlY3Qgc2l6ZS4uLi4uLi4uLi4uLi4uLjoiLCByb3VuZChlZmZlY3RzaXplLCA2KSwgIlxuIikKICAgIGNhdCgiU3RhbmRhcmQgZXJyb3IuLi4uLi4uLi4uLi46Iiwgcm91bmQoU0UsIDYpLCAiXG4iKQogICAgY2F0KCJPZGRzIHJhdGlvIChlZmZlY3Qgc2l6ZSkuLjoiLCByb3VuZChPUmVmZmVjdCwgMyksICJcbiIpCiAgICBjYXQoIkxvd2VyIDk1JSBDSS4uLi4uLi4uLi4uLi4uOiIsIHJvdW5kKENJX2xvdywgMyksICJcbiIpCiAgICBjYXQoIlVwcGVyIDk1JSBDSS4uLi4uLi4uLi4uLi4uOiIsIHJvdW5kKENJX3VwLCAzKSwgIlxuIikKICAgIGNhdCgiWi12YWx1ZS4uLi4uLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoenZhbHVlLCA2KSwgIlxuIikKICAgIGNhdCgiUC12YWx1ZS4uLi4uLi4uLi4uLi4uLi4uLi46Iiwgc2lnbmlmKHB2YWx1ZSwgOCksICJcbiIpCiAgICBjYXQoIkhvc21lciBhbmQgTGVtZXNob3cgcl4yLi4uOiIsIHJvdW5kKFIubCwgNiksICJcbiIpCiAgICBjYXQoIkNveCBhbmQgU25lbGwgcl4yLi4uLi4uLi4uOiIsIHJvdW5kKFIuY3MsIDYpLCAiXG4iKQogICAgY2F0KCJOYWdlbGtlcmtlJ3MgcHNldWRvIHJeMi4uLjoiLCByb3VuZChSLm4sIDYpLCAiXG4iKQogICAgY2F0KCJTYW1wbGUgc2l6ZSBvZiBBRSBEQi4uLi4uLjoiLCBBRV9OLCAiXG4iKQogICAgY2F0KCJTYW1wbGUgc2l6ZSBvZiBtb2RlbC4uLi4uLjoiLCBzYW1wbGVfc2l6ZSwgIlxuIikKICAgIGNhdCgiTWlzc2luZyBkYXRhICUuLi4uLi4uLi4uLi46Iiwgcm91bmQoUGVyY19NaXNzLCA2KSwgIlxuIikKICAgIH0gZWxzZSB7CiAgICAgIGNhdCgiQ29sbGVjdGluZyBkYXRhIGluIHN1bW1hcnkgb2JqZWN0LlxuIikKICAgIH0KICB9CiAgcmV0dXJuKG91dHB1dCkKICBwcmludChvdXRwdXQpCn0KYGBgCgoKIyBCYWNrZ3JvdW5kCgpVc2luZyBhIE1lbmRlbGlhbiBSYW5kb21pemF0aW9uIGFwcHJvYWNoLCB3ZSByZWNlbnRseSBleGFtaW5lZCBhc3NvY2lhdGlvbnMgYmV0d2VlbiB0aGUgY2lyY3VsYXRpbmcgbGV2ZWxzIG9mIDQxIGN5dG9raW5lcyBhbmQgZ3Jvd3RoIGZhY3RvcnMgYW5kIHRoZSByaXNrIG9mIHN0cm9rZSBpbiB0aGUgTUVHQVNUUk9LRSBHV0FTIGRhdGFzZXQgKDY3LDAwMCBzdHJva2UgY2FzZXMgYW5kIDQ1MCwwMDAgY29udHJvbHMpIGFuZCBmb3VuZCBNb25vY3l0ZSBjaGVtb2F0dHJhY3RhbnQgcHJvdGVpbi0xIChNQ1AtMSkgYXMgdGhlIGN5dG9raW5lIHNob3dpbmcgdGhlIHN0cm9uZ2VzdCBhc3NvY2lhdGlvbiB3aXRoIHN0cm9rZSwgcGFydGljdWxhcmx5IGxhcmdlIGFydGVyeSBhbmQgY2FyZGlvZW1ib2xpYyBzdHJva2UgKEdlb3JnYWtpcyBldCBhbC4sIDIwMTlhKS4gR2VuZXRpY2FsbHkgZWxldmF0ZWQgTUNQLTEgbGV2ZWxzIHdlcmUgYWxzbyBhc3NvY2lhdGVkIHdpdGggYSBoaWdoZXIgcmlzayBvZiBjb3JvbmFyeSBhcnRlcnkgZGlzZWFzZSBhbmQgbXlvY2FyZGlhbCBpbmZhcmN0aW9uIChHZW9yZ2FraXMgZXQgYWwuLCAyMDE5YSkuIEZ1cnRoZXIsIGluIGEgbWV0YS1hbmFseXNpcyBvZiA2IG9ic2VydmF0aW9uYWwgcG9wdWxhdGlvbi1iYXNlZCBvZiBsb25naXR1ZGluYWwgY29ob3J0IHN0dWRpZXMgd2UgcmVjZW50bHkgc2hvd2VkIHRoYXQgYmFzZWxpbmUgbGV2ZWxzIG9mIE1DUC0xIHdlcmUgYXNzb2NpYXRlZCB3aXRoIGEgaGlnaGVyIHJpc2sgb2YgaXNjaGVtaWMgc3Ryb2tlIG92ZXIgZm9sbG93LXVwIChHZW9yZ2FraXMgZXQgYWwuLCAyMDE5YikuCldoaWxlIHRoZXNlIGRhdGEgc3VnZ2VzdCBhIGNlbnRyYWwgcm9sZSBvZiBNQ1AtMSBpbiB0aGUgcGF0aG9nZW5lc2lzIG9mIGF0aGVyb3NjbGVyb3NpcywgaXQgcmVtYWlucyB1bmtub3duIGlmIE1DUC0xIGxldmVscyBpbiB0aGUgYmxvb2QgcmVhbGx5IHJlZmxlY3QgTUNQLTEgYWN0aXZpdHkuIE1DUC0xIGlzIGV4cHJlc3NlZCBpbiB0aGUgYXRoZXJvc2NsZXJvdGljIHBsYXF1ZSBhbmQgYXR0cmFjdHMgbW9ub2N5dGVzIGluIHRoZSBzdWJlbmRvdGhlbGlhbCBzcGFjZSAoTmVsa2VuIGV0IGFsLiwgMTk5MTsgUGFwYWRvcG91bG91IGV0IGFsLiwgMjAwODsgVGFrZXlhIGV0IGFsLiwgMTk5MzsgV2lsY294IGV0IGFsLiwgMTk5NCkuIFRodXMsIE1DUC0xIGxldmVscyBpbiB0aGUgcGxhcXVlIG1pZ2h0IG1vcmUgc3Ryb25nbHkgcmVmbGVjdCBNQ1AtMSBzaWduYWxpbmcuIEhvd2V2ZXIsIGl0IHJlbWFpbnMgdW5rbm93biBpZiBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGFzc29jaWF0ZSB3aXRoIHBsYXF1ZSB2dWxuZXJhYmlsaXR5IG9yIHJpc2sgb2YgY2FyZGlvdmFzY3VsYXIgZXZlbnRzLgoKCiMjIE9iamVjdGl2ZXMKCkFnYWluc3QgdGhpcyBiYWNrZ3JvdW5kIHdlIG5vdyBhaW0gdG8gbWFrZSB1c2Ugb2YgdGhlIGRhdGEgZnJvbSBBdGhlcm8tRXhwcmVzcyBCaW9iYW5rIFN0dWR5IHRvIGV4cGxvcmUgdGhlIGFzc29jaWF0aW9ucyBvZiBNQ1AtMSBwcm90ZWluIGxldmVscyBpbiB0aGUgYXRoZXJvc2NsZXJvdGljIHBsYXF1ZXMgZnJvbSBwYXRpZW50cyB1bmRlcmdvaW5nIGNhcm90aWQgZW5kYXJ0ZXJlY3RvbXkgd2l0aCBwaGVub3R5cGVzIG9mIHBsYXF1ZSB2dWxuZXJhYmlsaXR5IGFuZCBzZWNvbmRhcnkgdmFzY3VsYXIgZXZlbnRzIG92ZXIgYSBmb2xsb3ctdXAgb2YgdGhyZWUgeWVhcnMuCgoKIyMgTWV0aG9kcwoKV2UgdXNlZCB0aGUgTHVtaW5leC1wbGF0Zm9ybSB0byBtZWFzdXJlIGF0aGVyb3NjbGVyb3RpYyBwbGFxdWUgcHJvdGVpbnMuIEhpc3RvcmljYWxseSwgdGhpcyB3YXMgZG9uZSBpbiB0d28gZXhwZXJpbWVudHM6IAoKCioqRXhwZXJpbWVudCAxOiAqKgoKVGhpcyBlbnRhaWxzIGFuIGV4cGVyaW1lbnQgd2hlcmUgYWxzbyAyMCsgb3RoZXIgaW50ZXJsZXVraW5zLCBjeXRvLSBhbmQgY2hlbW9raW5lcywgYW5kIG1ldGFsbG9wcm90ZWluYXNlcyB3ZXJlIG1lYXN1cmVkLiBQYXJ0IG9mIHRoZXNlIHdlcmUgbWVhc3VyZWQgdXNpbmcgTFVNSU5FWCwgc29tZSBvZiB0aGVtIHdlcmUgbWVhc3VyZWQgdXNpbmcgRkFDUywgRUxJU0EsIGFuZCBhY3Rpdml0eSBhc3NheXMuIFRoZXNlIGFzc2F5cyB3ZXJlIHJ1biBhY2NvcmRpbmcgdG8gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHByb2R1Y2VyIGluIGEgcmVzZWFyY2ggc2V0dGluZy4gCgotIHZhcmlhYmxlIGBNQ1AxYDogTW9ub2N5dGUgY2hlbW90YWN0aWMgcHJvdGVpbiAxIChhLmsuYS4gQ0NMMjsgRW50cmV6IEdlbmU6IDYzNDcpIGNvbmNlbnRyYXRpb24gaW4gcGxhcXVlIFtwZy9tTF0uIEx1bWluZXggcGxhdGZvcm0uCgoKKipFeHBlcmltZW50IDI6ICoqCgpUaGlzIGVudGFpbHMgYW4gZXhwZXJpbWVudCB3aGVyZSBgTUNQMWAgd2FzIG1lYXN1cmVkIGluIGEgY2xpbmljYWwgZGlhZ25vc3RpYyBzZXR0aW5ncyBvbiBhIGNsaW5pY2FsbHkgdmFsaWRhdGVkIEx1bWluZXgtcGxhdGZvcm0uIAotIHZhcmlhYmxlIGBNQ1AxX3BnX21sXzIwMTVgOiBNb25vY3l0ZSBjaGVtb3RhY3RpYyBwcm90ZWluIDEgKGEuay5hLiBDQ0wyOyBFbnRyZXogR2VuZTogNjM0NykgY29uY2VudHJhdGlvbiBpbiBwbGFxdWUgW3BnL21MXS4gTHVtaW5leCBwbGF0Zm9ybS4KCgojIExvYWRpbmcgZGF0YQoKIyMgQ2xpbmljYWwgZGF0YQoKTG9hZGluZyBBdGhlcm8tRXhwcmVzcyBjbGluaWNhbCBkYXRhLgpgYGB7ciBMb2FkQUVEQn0KcmVxdWlyZShoYXZlbikKCiMgQUVEQiA8LSBoYXZlbjo6cmVhZF9zYXYocGFzdGUwKEFFREJfbG9jLCAiLzIwMTktM05FV19BdGhlcm9FeHByZXNzRGF0YWJhc2VfU2NpZW50aWZpY0FFXzAyMDcyMDE5X0lDX2FkZGVkLnNhdiIpKQpBRURCcmF3IDwtIGhhdmVuOjpyZWFkX3NhdihwYXN0ZTAoQUVEQl9sb2MsICIvMjAyMF8xX05FV19BdGhlcm9FeHByZXNzRGF0YWJhc2VfU2NpZW50aWZpY0FFXzE2LTAzLTIwMjAuc2F2IikpCgpoZWFkKEFFREJyYXcpCmBgYAoKIyMgUGxhcXVlIHByb3RlaW4gZGF0YQpMb2FkaW5nIEF0aGVyby1FeHByZXNzIHBsYXF1ZSBwcm90ZWluIG1lYXN1cmVtZW50cyBmcm9tIDIwMTUuCgpgYGB7ciBMb2FkQUUgUGxhcXVlUHJvdGVpbnN9CmxpYnJhcnkob3Blbnhsc3gpCkFFREJfUHJvdGVpbl8yMDE1IDwtIG9wZW54bHN4OjpyZWFkLnhsc3gocGFzdGUwKEFFREJfbG9jLCAiL19BRV9Qcm90ZWlucy9DeXRva2luZXNfYW5kX2NoZW1va2luZXNfMjAxNS8yMDIwMDYyOV9NUENGMDE1LTAwMjQueGxzeCIpLCBzaGVldCA9ICJmb3JfU1BTU19SIikKCm5hbWVzKEFFREJfUHJvdGVpbl8yMDE1KVtuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSkgPT0gIlNhbXBsZUlEIl0gPC0gIlNUVURZX05VTUJFUiIKCmhlYWQoQUVEQl9Qcm90ZWluXzIwMTUpCgpgYGAKCgoKCiMjIE1lcmdpbmcgcHJvdGVpbiBkYXRhCldlIHdpbGwgbWVyZ2UgdGhlc2UgbWVhc3VyZW1lbnRzIHRvIHRoZSBBRURCIChwZy9tTCBtZWFzdXJlbWVudHMgb2YgTUNQMSkuIFdlIGFsc28gZ2F0aGVyZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZXhwZXJpbWVudC4KCmBgYHtyIG1lcmdlIEFFREIgYW5kIFByb3RlaW5zfQpuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSlbbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpID09ICJJTDZfcGdfbWwiXSA8LSAiSUw2X3BnX21sXzIwMTUiCm5hbWVzKEFFREJfUHJvdGVpbl8yMDE1KVtuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSkgPT0gIklMNlJfcGdfbWwiXSA8LSAiSUw2Ul9wZ19tbF8yMDE1IgpuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSlbbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpID09ICJJTDhfcGdfbWwiXSA8LSAiSUw4X3BnX21sXzIwMTUiCm5hbWVzKEFFREJfUHJvdGVpbl8yMDE1KVtuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSkgPT0gIk1DUDFfcGdfbWwiXSA8LSAiTUNQMV9wZ19tbF8yMDE1IgpuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSlbbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpID09ICJSQU5URVNfcGdfbWwiXSA8LSAiUkFOVEVTX3BnX21sXzIwMTUiCm5hbWVzKEFFREJfUHJvdGVpbl8yMDE1KVtuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSkgPT0gIlBBSTFfcGdfbWwiXSA8LSAiUEFJMV9wZ19tbF8yMDE1IgpuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSlbbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpID09ICJNQ1NGX3BnX21sIl0gPC0gIk1DU0ZfcGdfbWxfMjAxNSIKbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpW25hbWVzKEFFREJfUHJvdGVpbl8yMDE1KSA9PSAiQWRpcG9uZWN0aW5fbmdfbWwiXSA8LSAiQWRpcG9uZWN0aW5fbmdfbWxfMjAxNSIKbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpW25hbWVzKEFFREJfUHJvdGVpbl8yMDE1KSA9PSAiU2VnbWVudF9pc29sYXRlZF9UcmlzIl0gPC0gIlNlZ21lbnRfaXNvbGF0ZWRfVHJpc18yMDE1IgpuYW1lcyhBRURCX1Byb3RlaW5fMjAxNSlbbmFtZXMoQUVEQl9Qcm90ZWluXzIwMTUpID09ICJUcmlzX3Byb3RlaW5fY29uY191Z19tbCJdIDwtICJUcmlzX3Byb3RlaW5fY29uY191Z19tbF8yMDE1IgoKdGVtcCA8LSBzdWJzZXQoQUVEQl9Qcm90ZWluXzIwMTUsIHNlbGVjdCA9IGMoIlNUVURZX05VTUJFUiIsICJJTDZfcGdfbWxfMjAxNSIsICJJTDZSX3BnX21sXzIwMTUiLCAiSUw4X3BnX21sXzIwMTUiLCAiTUNQMV9wZ19tbF8yMDE1IiwgIlJBTlRFU19wZ19tbF8yMDE1IiwgIlBBSTFfcGdfbWxfMjAxNSIsICJNQ1NGX3BnX21sXzIwMTUiLCAiQWRpcG9uZWN0aW5fbmdfbWxfMjAxNSIsICJTZWdtZW50X2lzb2xhdGVkX1RyaXNfMjAxNSIsICJUcmlzX3Byb3RlaW5fY29uY191Z19tbF8yMDE1IikpCgpBRURCIDwtIG1lcmdlKEFFREJyYXcsIHRlbXAsIGJ5LnggPSAiU1RVRFlfTlVNQkVSIiwgYnkueSA9ICJTVFVEWV9OVU1CRVIiLCBzb3J0ID0gRkFMU0UsCiAgICAgICAgICAgICAgYWxsLnggPSBUUlVFKQpybSh0ZW1wKQoKdGVtcCA8LSBzdWJzZXQoQUVEQiwgc2VsZWN0ID0gYygiU1RVRFlfTlVNQkVSIiwgIk1DUDEiLCAiTUNQMV9wZ191Z18yMDE1IiwgIk1DUDFfcGdfbWxfMjAxNSIsICJTZWdtZW50X2lzb2xhdGVkX1RyaXNfMjAxNSIpKQpkaW0odGVtcCkKaGVhZCh0ZW1wKQpybSh0ZW1wKSAgIApgYGAKCiMjIyMgRXhhbWluZSBBRURCCgpXZSBjYW4gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhlIEF0aGVyby1FeHByZXNzIEJpb2JhbmsgZGF0YXNldCB0byBrbm93IHdoYXQgZWFjaCB2YXJpYWJsZSBpcyBjYWxsZWQsIHdoYXQgY2xhc3MgKHR5cGUpIGl0IGhhcywgYW5kIHdoYXQgdGhlIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGlzLiAKClRoZXJlIGlzIGFuIGV4Y2VsbGVudCBwb3N0IG9uIHRoaXM6IGh0dHBzOi8vd3d3LnItYmxvZ2dlcnMuY29tL3dvcmtpbmctd2l0aC1zcHNzLWxhYmVscy1pbi1yLy4gCmBgYHtyIEFFREI6IGRlc2NyaWJlfQpBRURCICU+JSBzalBsb3Q6OnZpZXdfZGYoc2hvdy50eXBlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cuZnJxID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cucHJjID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cubmEgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgIG1heC5sZW4gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAubGFiZWxzID0gMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgICAgdXNlLnZpZXdlciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHBhc3RlMChPVVRfbG9jLCAiLyIsIFRvZGF5LCAiLkFFREIuZGljdGlvbmFyeS5odG1sIikpIApgYGAKCgojIyBGaXhpbmcgYW5kIGNyZWF0aW5nIHZhcmlhYmxlcwoKV2UgbmVlZCB0byBiZSB2ZXJ5IHN0cmljdCBpbiBkZWZpbmluZyBfc3ltcHRvbXMuXyBUaGVyZWZvcmUgd2Ugd2lsbCBmaXggYSBuZXcgdmFyaWFibGUgdGhhdCBncm91cHMgX3N5bXB0b21zXyBhdCBpbmNsdXNpb24uCgpDb2Rpbmcgb2YgX3N5bXB0b21zXyBpcyBhcyBmb2xsb3dzOgoKLSBtaXNzaW5nCS05OTkJCi0gQXN5bXB0b21hdGljCTAJCi0gVElBCTEJCi0gbWlub3Igc3Ryb2tlCTIJCi0gTWFqb3Igc3Ryb2tlCTMJCi0gQW1hdXJvc2lzIGZ1Z2F4CTQJCi0gRm91ciB2ZXNzZWwgZGlzZWFzZQk1CQotIFZlcnRlYnJvYmFzaWxhcnkgVElBCTcJCi0gUmV0aW5hbCBpbmZhcmN0aW9uCTgJCi0gU3ltcHRvbWF0aWMsIGJ1dCBhc3BlY2lmaWMgc3ltdG9tcwk5Ci0gQ29udHJhbGF0ZXJhbCBzeW1wdG9tYXRpYyBvY2NsdXNpb24JMTAJCi0gcmV0aW5hbCBpbmZhcmN0aW9uCTExCQotIGFybWNsYXVkaWNhdGlvbiBkdWUgdG8gb2NjbHVzaW9uIHN1YmNsYXZpYW4gYXJ0ZXJ5LCBDRUEgbmVlZGVkIGZvciBieXBhc3MJMTIJCi0gcmV0aW5hbCBpbmZhcmN0aW9uICsgVElBcwkxMwkKLSBPY3VsYXIgaXNjaGVtaWMgc3luZHJvbWUJMTQJCi0gaXNjaGVtaXNjaCBnbGF1Y29vbQkxNQkKLSBzdWJjbGF2aWFuIHN0ZWFsIHN5bmRyb21lCTE2CQotIFRHQQkxNwoKV2Ugd2lsbCBncm91cCBhcyBmb2xsb3dzIGluIGBTeW1wdG9tcy41R2A6CgoxLiBBc3ltcHRvbWF0aWMgPiAwCjIuIFRJQSA+IDEsIDcsIDEzCjMuIFN0cm9rZSA+IDIsIDMKNC4gT2N1bGFyID4gNCwgMTQsIDE1CjUuIFJldGluYWwgaW5mYXJjdGlvbiA+IDgsIDExCjYuIE90aGVyID4gNSwgOSwgMTAsIDEyLCAxNiwgMTcKCldlIHdpbGwgYWxzbyBncm91cCBhcyBmb2xsb3dzIGluIGBBc3ltcHRTeW1wdGA6CgoxLiBBc3ltcHRvbWF0aWMgPiAwCjIuIFRJQSA+IDEsIDcsIDEzICsgU3Ryb2tlID4gMiwgMyAKMy4gT2N1bGFyID4gNCwgMTQsIDE1ICsgUmV0aW5hbCBpbmZhcmN0aW9uID4gOCwgMTEgKyBPdGhlciA+IDUsIDksIDEwLCAxMiwgMTYsIDE3CgpXZSB3aWxsIGFsc28gZ3JvdXAgYXMgZm9sbG93cyBpbiBgQXN5bXB0U3ltcHQyR2A6CgoxLiBBc3ltcHRvbWF0aWMgPiAwCjIuIFRJQSA+IDEsIDcsIDEzICsgU3Ryb2tlID4gMiwgMyBPY3VsYXIgPiA0LCAxNCwgMTUgKyBSZXRpbmFsIGluZmFyY3Rpb24gPiA4LCAxMSArIE90aGVyID4gNSwgOSwgMTAsIDEyLCAxNiwgMTcKCgpgYGB7ciBGaXhTeW1wdG9tcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBGaXggc3ltcHRvbXMKCmF0dGFjaChBRURCKQoKQUVEQiRzeW1wdFtpcy5uYShBRURCJHN5bXB0KV0gPC0gLTk5OQoKIyBTeW1wdG9tcy41RwpBRURCWywiU3ltcHRvbXMuNUciXSA8LSBOQQojIEFFREIkU3ltcHRvbXMuNUdbc3ltcHQgPT0gIk5BIl0gPC0gIkFzeW1wdG9tYXRpYyIKQUVEQiRTeW1wdG9tcy41R1tzeW1wdCA9PSAtOTk5XSA8LSBOQQpBRURCJFN5bXB0b21zLjVHW3N5bXB0ID09IDBdIDwtICJBc3ltcHRvbWF0aWMiCkFFREIkU3ltcHRvbXMuNUdbc3ltcHQgPT0gMSB8IHN5bXB0ID09IDcgfCBzeW1wdCA9PSAxM10gPC0gIlRJQSIKQUVEQiRTeW1wdG9tcy41R1tzeW1wdCA9PSAyIHwgc3ltcHQgPT0gM10gPC0gIlN0cm9rZSIKQUVEQiRTeW1wdG9tcy41R1tzeW1wdCA9PSA0IHwgc3ltcHQgPT0gMTQgfCBzeW1wdCA9PSAxNSBdIDwtICJPY3VsYXIiCkFFREIkU3ltcHRvbXMuNUdbc3ltcHQgPT0gOCB8IHN5bXB0ID09IDExXSA8LSAiUmV0aW5hbCBpbmZhcmN0aW9uIgpBRURCJFN5bXB0b21zLjVHW3N5bXB0ID09IDUgfCBzeW1wdCA9PSA5IHwgc3ltcHQgPT0gMTAgfCBzeW1wdCA9PSAxMiB8IHN5bXB0ID09IDE2IHwgc3ltcHQgPT0gMTddIDwtICJPdGhlciIKCiMgQXN5bXB0U3ltcHQKQUVEQlssIkFzeW1wdFN5bXB0Il0gPC0gTkEKQUVEQiRBc3ltcHRTeW1wdFtzeW1wdCA9PSAtOTk5XSA8LSBOQQpBRURCJEFzeW1wdFN5bXB0W3N5bXB0ID09IDBdIDwtICJBc3ltcHRvbWF0aWMiCkFFREIkQXN5bXB0U3ltcHRbc3ltcHQgPT0gMSB8IHN5bXB0ID09IDcgfCBzeW1wdCA9PSAxMyB8IHN5bXB0ID09IDIgfCBzeW1wdCA9PSAzXSA8LSAiU3ltcHRvbWF0aWMiCkFFREIkQXN5bXB0U3ltcHRbc3ltcHQgPT0gNCB8IHN5bXB0ID09IDE0IHwgc3ltcHQgPT0gMTUgfCBzeW1wdCA9PSA4IHwgc3ltcHQgPT0gMTEgfCBzeW1wdCA9PSA1IHwgc3ltcHQgPT0gOSB8IHN5bXB0ID09IDEwIHwgc3ltcHQgPT0gMTIgfCBzeW1wdCA9PSAxNiB8IHN5bXB0ID09IDE3XSA8LSAiT2N1bGFyIGFuZCBvdGhlcnMiCgojIEFzeW1wdFN5bXB0CkFFREJbLCJBc3ltcHRTeW1wdDJHIl0gPC0gTkEKQUVEQiRBc3ltcHRTeW1wdDJHW3N5bXB0ID09IC05OTldIDwtIE5BCkFFREIkQXN5bXB0U3ltcHQyR1tzeW1wdCA9PSAwXSA8LSAiQXN5bXB0b21hdGljIgpBRURCJEFzeW1wdFN5bXB0Mkdbc3ltcHQgPT0gMSB8IHN5bXB0ID09IDcgfCBzeW1wdCA9PSAxMyB8IHN5bXB0ID09IDIgfCBzeW1wdCA9PSAzIHwgc3ltcHQgPT0gNCB8IHN5bXB0ID09IDE0IHwgc3ltcHQgPT0gMTUgfCBzeW1wdCA9PSA4IHwgc3ltcHQgPT0gMTEgfCBzeW1wdCA9PSA1IHwgc3ltcHQgPT0gOSB8IHN5bXB0ID09IDEwIHwgc3ltcHQgPT0gMTIgfCBzeW1wdCA9PSAxNiB8IHN5bXB0ID09IDE3XSA8LSAiU3ltcHRvbWF0aWMiCgpkZXRhY2goQUVEQikKCiMgdGFibGUoQUVEQiRzeW1wdCwgdXNlTkEgPSAiaWZhbnkiKQojIHRhYmxlKEFFREIkQXN5bXB0U3ltcHQyRywgdXNlTkEgPSAiaWZhbnkiKQojIHRhYmxlKEFFREIkU3ltcHRvbXMuNUcsIHVzZU5BID0gImlmYW55IikKIyAKIyB0YWJsZShBRURCJEFzeW1wdFN5bXB0MkcsIEFFREIkc3ltcHQsIHVzZU5BID0gImlmYW55IikKIyB0YWJsZShBRURCJFN5bXB0b21zLjVHLCBBRURCJHN5bXB0LCB1c2VOQSA9ICJpZmFueSIpCnRhYmxlKEFFREIkQXN5bXB0U3ltcHQyRywgQUVEQiRTeW1wdG9tcy41RywgdXNlTkEgPSAiaWZhbnkiKQoKIyBBRURCLnRlbXAgPC0gc3Vic2V0KEFFREIsICBzZWxlY3QgPSBjKCJTVFVEWV9OVU1CRVIiLCAiVVBJRCIsICJBZ2UiLCAiR2VuZGVyIiwgIkhvc3BpdGFsIiwgIkFydGVyeV9zdW1tYXJ5IiwgInN5bXB0IiwgIlN5bXB0b21zLjVHIiwgIkFzeW1wdFN5bXB0IikpCiMgcmVxdWlyZShsYWJlbGxlZCkKIyBBRURCLnRlbXAkR2VuZGVyIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkR2VuZGVyKQojIEFFREIudGVtcCRIb3NwaXRhbCA8LSB0b19mYWN0b3IoQUVEQi50ZW1wJEhvc3BpdGFsKQojIEFFREIudGVtcCRBcnRlcnlfc3VtbWFyeSA8LSB0b19mYWN0b3IoQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5KQojIAojIERUOjpkYXRhdGFibGUoQUVEQi50ZW1wWzE6MTAsXSwgY2FwdGlvbiA9ICJFeGNlcnB0IG9mIHRoZSB3aG9sZSBBRURCLiIsIHJvd25hbWVzID0gRkFMU0UpCiMgCiMgdGFibGUoQUVEQi50ZW1wJFN5bXB0b21zLjVHLCBBRURCLnRlbXAkQXN5bXB0U3ltcHQpCiMgCiMgcm0oQUVEQi50ZW1wKQoKYGBgCgpXZSB3aWxsIGFsc28gZml4IHRoZSBfcGxhcXVlcGhlbm90eXBlc18gdmFyaWFibGUuICAKCkNvZGluZyBvZiBzeW1wdG9tcyBpcyBhcyBmb2xsb3dzOgoKLSBtaXNzaW5nCS05OTkJCi0gbm90IHJlbGV2YW50IC04ODgKLSBmaWJyb3VzCTEJCi0gZmlicm9hdGhlcm9tYXRvdXMJMgkKLSBhdGhlcm9tYXRvdXMJMwkKCgpgYGB7ciBGaXhQbGFxdWVQaGVub3R5cGVzLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKIyBGaXggcGxhcXVlcGhlbm90eXBlcwphdHRhY2goQUVEQikKQUVEQlssIk92ZXJhbGxQbGFxdWVQaGVub3R5cGUiXSA8LSBOQQpBRURCJE92ZXJhbGxQbGFxdWVQaGVub3R5cGVbcGxhcXVlcGhlbm90eXBlID09IC05OTldIDwtIE5BCkFFREIkT3ZlcmFsbFBsYXF1ZVBoZW5vdHlwZVtwbGFxdWVwaGVub3R5cGUgPT0gLTk5OV0gPC0gTkEKQUVEQiRPdmVyYWxsUGxhcXVlUGhlbm90eXBlW3BsYXF1ZXBoZW5vdHlwZSA9PSAxXSA8LSAiZmlicm91cyIKQUVEQiRPdmVyYWxsUGxhcXVlUGhlbm90eXBlW3BsYXF1ZXBoZW5vdHlwZSA9PSAyXSA8LSAiZmlicm9hdGhlcm9tYXRvdXMiCkFFREIkT3ZlcmFsbFBsYXF1ZVBoZW5vdHlwZVtwbGFxdWVwaGVub3R5cGUgPT0gM10gPC0gImF0aGVyb21hdG91cyIKZGV0YWNoKEFFREIpCgp0YWJsZShBRURCJE92ZXJhbGxQbGFxdWVQaGVub3R5cGUpCgojIEFFREIudGVtcCA8LSBzdWJzZXQoQUVEQiwgIHNlbGVjdCA9IGMoIlNUVURZX05VTUJFUiIsICJVUElEIiwgIkFnZSIsICJHZW5kZXIiLCAiSG9zcGl0YWwiLCAiQXJ0ZXJ5X3N1bW1hcnkiLCAicGxhcXVlcGhlbm90eXBlIiwgIk92ZXJhbGxQbGFxdWVQaGVub3R5cGUiKSkKIyByZXF1aXJlKGxhYmVsbGVkKQojIEFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCiMgQUVEQi50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkSG9zcGl0YWwpCiMgQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCiMgCiMgRFQ6OmRhdGF0YWJsZShBRURCLnRlbXBbMToxMCxdLCBjYXB0aW9uID0gIkV4Y2VycHQgb2YgdGhlIHdob2xlIEFFREIuIiwgcm93bmFtZXMgPSBGQUxTRSkKIyAKIyBybShBRURCLnRlbXApCgpgYGAKCldlIHdpbGwgYWxzbyBmaXggdGhlIF9kaWFiZXRlc18gc3RhdHVzIHZhcmlhYmxlLiBXZSBkZWZpbmUgZGlhYmV0ZXMgYXMgaGlzdG9yeSBvZiBhIGRpYWdub3NpcyBhbmQvb3IgdXNlIG9mIGdsdWNvc2UtbG93ZXJpbmcgbWVkaWNhdGlvbnMuCgpgYGB7ciBGaXhEaWFiZXRlcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBGaXggZGlhYmV0ZXMKYXR0YWNoKEFFREIpCkFFREJbLCJEaWFiZXRlc1N0YXR1cyJdIDwtIE5BCkFFREIkRGlhYmV0ZXNTdGF0dXNbRE0uY29tcG9zaXRlID09IC05OTldIDwtIE5BCkFFREIkRGlhYmV0ZXNTdGF0dXNbRE0uY29tcG9zaXRlID09IDBdIDwtICJDb250cm9sIChubyBEaWFiZXRlcyBEeC9NZWQpIgpBRURCJERpYWJldGVzU3RhdHVzW0RNLmNvbXBvc2l0ZSA9PSAxXSA8LSAiRGlhYmV0ZXMiCmRldGFjaChBRURCKQoKdGFibGUoQUVEQiRETS5jb21wb3NpdGUpCgp0YWJsZShBRURCJERpYWJldGVzU3RhdHVzKQoKCiMgQUVEQi50ZW1wIDwtIHN1YnNldChBRURCLCAgc2VsZWN0ID0gYygiU1RVRFlfTlVNQkVSIiwgIlVQSUQiLCAiQWdlIiwgIkdlbmRlciIsICJIb3NwaXRhbCIsICJBcnRlcnlfc3VtbWFyeSIsICJETS5jb21wb3NpdGUiLCAiRGlhYmV0ZXNTdGF0dXMiKSkKIyByZXF1aXJlKGxhYmVsbGVkKQojIEFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCiMgQUVEQi50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkSG9zcGl0YWwpCiMgQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCiMgQUVEQi50ZW1wJERpYWJldGVzU3RhdHVzIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkRGlhYmV0ZXNTdGF0dXMpCiMgCiMgRFQ6OmRhdGF0YWJsZShBRURCLnRlbXBbMToxMCxdLCBjYXB0aW9uID0gIkV4Y2VycHQgb2YgdGhlIHdob2xlIEFFREIuIiwgcm93bmFtZXMgPSBGQUxTRSkKIyAKIyBybShBRURCLnRlbXApCgpgYGAKCgpXZSB3aWxsIGFsc28gZml4IHRoZSBfc21va2luZ18gc3RhdHVzIHZhcmlhYmxlLiBXZSBhcmUgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHNvbWVvbmUgbmV2ZXIsIGV2ZXIgb3IgaXMgY3VycmVudGx5IChhdCB0aGUgdGltZSBvZiBpbmNsdXNpb24pIHNtb2tpbmcuIFRoaXMgaXMgYmFzZWQgb24gdGhlIHF1ZXN0aW9ubmFpcmUuIAoKLSBgZGlldDgwMWA6IGFyZSB5b3UgYSBzbW9rZXI/Ci0gYGRpZXQ4MDJgOiBkaWQgeW91IHNtb2tlIGluIHRoZSBwYXN0PwoKV2UgYWxyZWFkeSBoYXZlIHNvbWUgdmFyaWFibGVzIGluZGljYXRpbmcgc21va2luZyBzdGF0dXM6CgotIGBTbW9raW5nUmVwb3J0ZWRgOiBwYXRpZW50IGhhcyByZXBvcnRlZCB0byBzbW9rZS4KLSBgU21va2luZ1llYXJPUmA6IHNtb2tpbmcgaW4gdGhlIHllYXIgb2Ygc3VyZ2VyeT8KLSBgU21va2VyQ3VycmVudGA6IGN1cnJlbnRseSBzbW9raW5nPwoKCgpgYGB7ciBGaXhTbW9raW5nLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpyZXF1aXJlKGxhYmVsbGVkKQpBRURCJGRpZXQ4MDEgPC0gdG9fZmFjdG9yKEFFREIkZGlldDgwMSkKQUVEQiRkaWV0ODAyIDwtIHRvX2ZhY3RvcihBRURCJGRpZXQ4MDIpCkFFREIkZGlldDgwNSA8LSB0b19mYWN0b3IoQUVEQiRkaWV0ODA1KQpBRURCJFNtb2tpbmdSZXBvcnRlZCA8LSB0b19mYWN0b3IoQUVEQiRTbW9raW5nUmVwb3J0ZWQpCkFFREIkU21va2VyQ3VycmVudCA8LSB0b19mYWN0b3IoQUVEQiRTbW9rZXJDdXJyZW50KQpBRURCJFNtb2tpbmdZZWFyT1IgPC0gdG9fZmFjdG9yKEFFREIkU21va2luZ1llYXJPUikKCiMgdGFibGUoQUVEQiRkaWV0ODAxKQojIHRhYmxlKEFFREIkZGlldDgwMikKIyB0YWJsZShBRURCJFNtb2tpbmdSZXBvcnRlZCkKIyB0YWJsZShBRURCJFNtb2tlckN1cnJlbnQpCiMgdGFibGUoQUVEQiRTbW9raW5nWWVhck9SKQojIHRhYmxlKEFFREIkU21va2luZ1JlcG9ydGVkLCBBRURCJFNtb2tlckN1cnJlbnQsIHVzZU5BID0gImlmYW55IiwgZG5uID0gYygiUmVwb3J0ZWQgc21va2luZyIsICJDdXJyZW50IHNtb2tlciIpKQojIAojIHRhYmxlKEFFREIkZGlldDgwMSwgQUVEQiRkaWV0ODAyLCB1c2VOQSA9ICJpZmFueSIsIGRubiA9IGMoIlNtb2tlciIsICJQYXN0IHNtb2tlciIpKQoKY2F0KCJcbkZpeGluZyBzbW9raW5nIHN0YXR1cy5cbiIpCmF0dGFjaChBRURCKQpBRURCWywiU21va2VyU3RhdHVzIl0gPC0gTkEKQUVEQiRTbW9rZXJTdGF0dXNbZGlldDgwMiA9PSAiZG9uJ3Qga25vdyJdIDwtICJOZXZlciBzbW9rZWQiCkFFREIkU21va2VyU3RhdHVzW2RpZXQ4MDIgPT0gIkkgc3RpbGwgc21va2UiXSA8LSAiQ3VycmVudCBzbW9rZXIiCkFFREIkU21va2VyU3RhdHVzW1Ntb2tlckN1cnJlbnQgPT0gIm5vIiAmIGRpZXQ4MDIgPT0gIm5vIl0gPC0gIk5ldmVyIHNtb2tlZCIKQUVEQiRTbW9rZXJTdGF0dXNbU21va2VyQ3VycmVudCA9PSAibm8iICYgZGlldDgwMiA9PSAieWVzIl0gPC0gIkV4LXNtb2tlciIKQUVEQiRTbW9rZXJTdGF0dXNbU21va2VyQ3VycmVudCA9PSAieWVzIl0gPC0gIkN1cnJlbnQgc21va2VyIgpBRURCJFNtb2tlclN0YXR1c1tTbW9rZXJDdXJyZW50ID09ICJubyBkYXRhIGF2YWlsYWJsZS9taXNzaW5nIl0gPC0gTkEKIyBBRURCJFNtb2tlclN0YXR1c1tpcy5uYShTbW9rZXJDdXJyZW50KV0gPC0gIk5ldmVyIHNtb2tlZCIKZGV0YWNoKEFFREIpCgpjYXQoIlxuKiBDdXJyZW50IHNtb2tpbmcgc3RhdHVzLlxuIikKdGFibGUoQUVEQiRTbW9rZXJDdXJyZW50LAogICAgICB1c2VOQSA9ICJpZmFueSIsIAogICAgICBkbm4gPSBjKCJDdXJyZW50IHNtb2tlciIpKQoKY2F0KCJcbiogVXBkYXRlZCBzbW9raW5nIHN0YXR1cy5cbiIpCnRhYmxlKEFFREIkU21va2VyU3RhdHVzLAogICAgICB1c2VOQSA9ICJpZmFueSIsIAogICAgICBkbm4gPSBjKCJVcGRhdGVkIHNtb2tpbmcgc3RhdHVzIikpCgpjYXQoIlxuKiBDb21wYXJpbmcgdG8gJ1Ntb2tlckN1cnJlbnQnLlxuIikKdGFibGUoQUVEQiRTbW9rZXJTdGF0dXMsIEFFREIkU21va2VyQ3VycmVudCwgCiAgICAgIHVzZU5BID0gImlmYW55IiwgCiAgICAgIGRubiA9IGMoIlVwZGF0ZWQgc21va2luZyBzdGF0dXMiLCAiQ3VycmVudCBzbW9rZXIiKSkKCiMgQUVEQi50ZW1wIDwtIHN1YnNldChBRURCLCAgc2VsZWN0ID0gYygiU1RVRFlfTlVNQkVSIiwgIlVQSUQiLCAiQWdlIiwgIkdlbmRlciIsICJIb3NwaXRhbCIsICJBcnRlcnlfc3VtbWFyeSIsICJETS5jb21wb3NpdGUiLCAiRGlhYmV0ZXNTdGF0dXMiKSkKIyByZXF1aXJlKGxhYmVsbGVkKQojIEFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCiMgQUVEQi50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkSG9zcGl0YWwpCiMgQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCiMgQUVEQi50ZW1wJERpYWJldGVzU3RhdHVzIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkRGlhYmV0ZXNTdGF0dXMpCiMgCiMgRFQ6OmRhdGF0YWJsZShBRURCLnRlbXBbMToxMCxdLCBjYXB0aW9uID0gIkV4Y2VycHQgb2YgdGhlIHdob2xlIEFFREIuIiwgcm93bmFtZXMgPSBGQUxTRSkKIyAKIyBybShBRURCLnRlbXApCgoKYGBgCgpXZSB3aWxsIGFsc28gZml4IHRoZSBfYWxjb2hvbF8gc3RhdHVzIHZhcmlhYmxlLgoKYGBge3IgRml4QWxjb2hvbCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KCiMgRml4IGRpYWJldGVzCmF0dGFjaChBRURCKQpBRURCWywiQWxjb2hvbFVzZSJdIDwtIE5BCkFFREIkQWxjb2hvbFVzZVtkaWV0ODEwID09IC05OTldIDwtIE5BCkFFREIkQWxjb2hvbFVzZVtkaWV0ODEwID09IDBdIDwtICJObyIKQUVEQiRBbGNvaG9sVXNlW2RpZXQ4MTAgPT0gMV0gPC0gIlllcyIKZGV0YWNoKEFFREIpCgp0YWJsZShBRURCJEFsY29ob2xVc2UpCgojIEFFREIudGVtcCA8LSBzdWJzZXQoQUVEQiwgIHNlbGVjdCA9IGMoIlNUVURZX05VTUJFUiIsICJVUElEIiwgIkFnZSIsICJHZW5kZXIiLCAiSG9zcGl0YWwiLCAiQXJ0ZXJ5X3N1bW1hcnkiLCAiZGlldDgxMCIsICJBbGNvaG9sVXNlIikpCiMgcmVxdWlyZShsYWJlbGxlZCkKIyBBRURCLnRlbXAkR2VuZGVyIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkR2VuZGVyKQojIEFFREIudGVtcCRIb3NwaXRhbCA8LSB0b19mYWN0b3IoQUVEQi50ZW1wJEhvc3BpdGFsKQojIEFFREIudGVtcCRBcnRlcnlfc3VtbWFyeSA8LSB0b19mYWN0b3IoQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5KQojIEFFREIudGVtcCRBbGNvaG9sVXNlIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQWxjb2hvbFVzZSkKIyAKIyBEVDo6ZGF0YXRhYmxlKEFFREIudGVtcFsxOjEwLF0sIGNhcHRpb24gPSAiRXhjZXJwdCBvZiB0aGUgd2hvbGUgQUVEQi4iLCByb3duYW1lcyA9IEZBTFNFKQojIAojIHJtKEFFREIudGVtcCkKCgpgYGAKCldlIHdpbGwgYWxzbyBmaXggYSBoaXN0b3J5IG9mIENBRCwgc3Ryb2tlIG9yIHBlcmlwaGVyYWwgaW50ZXJ2ZW50aW9uIHN0YXR1cyB2YXJpYWJsZS4gVGhpcyB3aWxsIGJlIGJhc2VkIG9uIGBDQURfaGlzdG9yeWAsIGBTdHJva2VfaGlzdG9yeWAsIGFuZCBgUGVyaXBoZXJhbC5pbnRlcnZgCgpgYGB7ciBGaXhDQURfSGlzdG9yeSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KCiMgRml4IGRpYWJldGVzCmF0dGFjaChBRURCKQpBRURCWywiTWVkSHhfQ1ZEIl0gPC0gTkEKQUVEQiRNZWRIeF9DVkRbQ0FEX2hpc3RvcnkgPT0gMCB8IFN0cm9rZV9oaXN0b3J5ID09IDAgfCBQZXJpcGhlcmFsLmludGVydiA9PSAwXSA8LSAiTm8iCkFFREIkTWVkSHhfQ1ZEW0NBRF9oaXN0b3J5ID09IDEgfCBTdHJva2VfaGlzdG9yeSA9PSAxIHwgUGVyaXBoZXJhbC5pbnRlcnYgPT0gMV0gPC0gInllcyIKZGV0YWNoKEFFREIpCgp0YWJsZShBRURCJENBRF9oaXN0b3J5KQp0YWJsZShBRURCJFN0cm9rZV9oaXN0b3J5KQp0YWJsZShBRURCJFBlcmlwaGVyYWwuaW50ZXJ2KQp0YWJsZShBRURCJE1lZEh4X0NWRCkKCiMgQUVEQi50ZW1wIDwtIHN1YnNldChBRURCLCAgc2VsZWN0ID0gYygiU1RVRFlfTlVNQkVSIiwgIlVQSUQiLCAiQWdlIiwgIkdlbmRlciIsICJIb3NwaXRhbCIsICJBcnRlcnlfc3VtbWFyeSIsICJkaWV0ODEwIiwgIkFsY29ob2xVc2UiKSkKIyByZXF1aXJlKGxhYmVsbGVkKQojIEFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCiMgQUVEQi50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkSG9zcGl0YWwpCiMgQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCiMgQUVEQi50ZW1wJEFsY29ob2xVc2UgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRBbGNvaG9sVXNlKQojIAojIERUOjpkYXRhdGFibGUoQUVEQi50ZW1wWzE6MTAsXSwgY2FwdGlvbiA9ICJFeGNlcnB0IG9mIHRoZSB3aG9sZSBBRURCLiIsIHJvd25hbWVzID0gRkFMU0UpCiMgCiMgcm0oQUVEQi50ZW1wKQoKCmBgYAoKCgoKIyBBdGhlcm8tRXhwcmVzcyBCaW9iYW5rIFN0dWR5CgojIyBCYXNlbGluZSBjaGFyYWN0ZXJpc3RpY3MKCldlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGF0IGJhc2VsaW5lLgoKLSBBZ2UgKHllYXJzKQotIEZlbWFsZSBzZXggKE4sICUpCi0gSHlwZXJ0ZW5zaW9uIChOLCAlKQotIFNCUCAobW1IZykKLSBEQlAgKG1tSGcpCi0gRGlhYmV0ZXMgbWVsbGl0dXMgKE4sICUpCi0gVG90YWwgY2hvbGVzdGVyb2wgbGV2ZWxzIChtZy9kTCkKLSBMREwgY2hvbGVzdGVyb2wgbGV2ZWxzIChtZy9kTCkKLSBIREwgY2hvbGVzdGVyb2wgbGV2ZWxzIChtZy9kTCkKLSBUcmlnbHljZXJpZGUgbGV2ZWxzIChtZy9kTCkKLSBVc2Ugb2Ygc3RhdGlucyAoTiwgJSkKLSBVc2Ugb2YgYW50aXBsYXRlbGV0IGRydWdzIChOLCAlKQotIEJNSSAoa2cvbcKyKQotIFNtb2tpbmcgc3RhdHVzIChOLCAlKQogIC0gTmV2ZXIgc21va2VycwogIC0gRXgtc21va2VycwogIC0gQ3VycmVudCBzbW9rZXJzCi0gSGlzdG9yeSBvZiBDQUQgKE4sICUpCi0gSGlzdG9yeSBvZiBQQUQgKE4sICUpCi0gQ2xpbmljYWwgbWFuaWZlc3RhdGlvbnMKICAtIEFzeW1wdG9tYXRpYwogIC0gQW1hdXJvc2lzIGZ1Z2F4CiAgLSBUSUEKICAtIFN0cm9rZQotIGVHRlIgKG1ML21pbi8xLjczIG3CsikKLSBNQ1AtMSBwbGFxdWUgbGV2ZWxzIChwZy9tTCkgKExVTUlORVggYmFzZWQsIHR3byBleHBlcmltZW50cyBgTUNQMWAsIGFuZCBgTUNQMV9wZ19tbF8yMDE1YCkKCgpgYGB7ciBCYXNlbGluZSBBRURCOiBjcmVhdGlvbiwgaW5jbHVkZSA9IEZBTFNFfQpjYXQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpCmNhdCgiU0VMRUNUSU9OIFRIRSBTSElaWkxFXG4iKQoKIyMjIEFydGVyeSBsZXZlbHMKIyBBRWRhdGEkQXJ0ZXJ5X3N1bW1hcnk6IAojICAgICAgICAgICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwKIyBOT1QgVVNFIC0gMCBObyBhcnRlcnkga25vd24gKHlldCksIG5vIHN1cmdlcnkgKHBhdGllbnQgaWxsLCBkaWVkLCBleGl0ZWQgc3R1ZHkpLCByZS1udW1iZXJlZCB0byBBQUEKIyBVU0UgLSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fyb3RpZCAobGVmdCAmIHJpZ2h0KQojIFVTRSAtIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlbW9yYWwvaWxpYWMgKGxlZnQsIHJpZ2h0IG9yIGJvdGggc2lkZXMpCiMgTk9UIFVTRSAtIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGNhcm90aWQgYXJ0ZXJpZXMgKGNvbW1vbiwgZXh0ZXJuYWwpCiMgTk9UIFVTRSAtIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcm90aWQgYnlwYXNzIGFuZCBpbmp1cnkgKGxlZnQsIHJpZ2h0IG9yIGJvdGggc2lkZXMpCiMgTk9UIFVTRSAtIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmV1cnlzbWF0YSAoY2Fyb3RpZCAmIGZlbW9yYWwpCiMgTk9UIFVTRSAtIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFvcnRhCiMgTk9UIFVTRSAtIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGFydGVyaWVzIChyZW5hbCwgcG9wbGl0ZWFsLCB2ZXJ0ZWJyYWwpCiMgTk9UIFVTRSAtIDggICAgICAgICAgICAgICAgICAgICAgICBmZW1vcmFsIGJ5cGFzcywgYW5naW9zZWFsIGFuZCBpbmp1cnkgKGxlZnQsIHJpZ2h0IG9yIGJvdGggc2lkZXMpCgojIyMgQUVkYXRhJGluZm9ybWVkY29uc2VudAojICAgICAgICAgICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbAojIE5PVCBVU0UgLSAtOTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nCiMgTk9UIFVTRSAtIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8sIGRpZWQKIyBVU0UgLSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzCiMgVVNFIC0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIGhlYWx0aCB0cmVhdG1lbnQgd2hlbiBwb3NzaWJsZQojIFVTRSAtIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQKIyBVU0UgLSA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCBubyBoZWFsdGggdHJlYXRtZW50LCBubyBjb21tZXJjaWFsIGJ1c2luZXNzCiMgTk9UIFVTRSAtIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCBubyB0aXNzdWUsIG5vIGNvbW1lcmljYWwgYnVzaW5lc3MKIyBOT1QgVVNFIC0gNiAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHRpc3N1ZSwgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIG1lZGljYWwgaW5mbywgbm8gY29tbWVyY2lhbCBidXNpbmVzcwojIFVTRSAtIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcywgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIGNvbW1lcmNpYWwgYnVzaW5lc3MKIyBVU0UgLSA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCBubyBxdWVzdGlvbm5haXJlcywgaGVhbHRoIHRyZWF0bWVudCB3aGVuIHBvc3NpYmxlCiMgTk9UIFVTRSAtIDkgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHRpc3N1ZSwgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIGNvbW1lcmljYWwgYnVzaW5lc3MKIyBVU0UgLSAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIG1lZGljYWwgaW5mbywgbm8gY29tbWVyY2lhbCBidXNpbmVzcwojIE5PVCBVU0UgLSAxMSB5ZXMsIG5vIHRpc3N1ZSwgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIG1lZGljYWwgaW5mbywgbm8gY29tbWVyY2lhbCBidXNpbmVzcwojIFVTRSAtIDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHF1ZXN0aW9ubmFpcmVzLCBubyBoZWFsdGggdHJlYXRtZW50CiMgTk9UIFVTRSAtIDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcywgbm8gdGlzc3VlLCBubyBoZWFsdGggdHJlYXRtZW50CiMgTk9UIFVTRSAtIDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCBubyB0aXNzdWUsIG5vIHF1ZXN0aW9ubmFpcmVzCiMgTk9UIFVTRSAtIDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHRpc3N1ZSwgaGVhbHRoIHRyZWF0bWVudCB3aGVuIHBvc3NpYmxlCiMgTk9UIFVTRSAtIDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcywgbm8gdGlzc3VlCiMgVVNFIC0gMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIGNvbW1lcmljYWwgYnVzaW5lc3MKIyBVU0UgLSAxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIGhlYWx0aCB0cmVhdG1lbnQgd2hlbiBwb3NzaWJsZSwgbm8gY29tbWVyY2lhbCBidXNpbmVzcwojIFVTRSAtIDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcywgbm8gbWVkaWNhbCBpbmZvLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzCiMgVVNFIC0gMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllcywgbm8gcXVlc3Rpb25uYWlyZXMKIyBOT1QgVVNFIC0gMjEgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCBubyB0aXNzdWUsIG5vIHF1ZXN0aW9ubmFpcmVzLCBubyBoZWFsdGggdHJlYXRtZW50LCBubyBtZWRpY2FsIGluZm8KIyBOT1QgVVNFIC0gMjIgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHRpc3N1ZSwgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIGNvbW1lcmNpYWwgYnVzaW5lc3MKIyBVU0UgLSAyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIG1lZGljYWwgaW5mbwojIFVTRSAtIDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHF1ZXN0aW9ubmFpcmVzLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzCiMgVVNFIC0gMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIHF1ZXN0aW9ubmFpcmVzLCBubyBoZWFsdGggdHJlYXRtZW50LCBubyBtZWRpY2FsIGluZm8KIyBVU0UgLSAyNiAgICAgICAgICAgICAgICAgIHllcywgbm8gcXVlc3Rpb25uYWlyZXMsIGhlYWx0aCB0cmVhdG1lbnQgd2hlbiBwb3NzaWJsZSwgbm8gY29tbWVyY2lhbCBidXNpbmVzcwojIFVTRSAtIDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzLCAgbm8gaGVhbHRoIHRyZWF0bWVudCwgbm8gbWVkaWNhbCBpbmZvCiMgTk9UIFVTRSAtIDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubywgZG9lc24ndCB3YW50IHRvCiMgTk9UIFVTRSAtIDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8sIHVuYWJsZSB0byBzaWduCiMgTk9UIFVTRSAtIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8sIG5vIHJlYWN0aW9uCiMgTk9UIFVTRSAtIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vLCBsb3N0CiMgTk9UIFVTRSAtIDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vLCB0b28gb2xkCiMgTk9UIFVTRSAtIDM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMsIG5vIG1lZGljYWwgaW5mbywgaGVhbHRoIHRyZWF0bWVudCB3aGVuIHBvc3NpYmxlCiMgTk9UIFVTRSAtIDM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gKG5ldmVyIGFza2VkIGZvciBJQyBiZWNhdXNlIHRoZXJlIHdhcyBubyB0aXNzdWUpCiMgVVNFIC0gMzYgICAgICAgICAgICAgICAgICAgIHllcywgbm8gbWVkaWNhbCBpbmZvLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzLCBoZWFsdGggdHJlYXRtZW50IHdoZW4gcG9zc2libGUKIyBOT1QgVVNFIC0gMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubywgZW5kcG9pbnQKIyBVU0UgLSAzOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbCBuaWV0cyBpbnZ1bGxlbiwgd2VsIGFsbGVzIGdlYnJ1aWtlbgojIFVTRSAtIDM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBpbmZvcm1lZCBjb25jZW50czogeWVzLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzCiMgTk9UIFVTRSAtIDQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9vaXQgZ2VpbmNsdWRlZXJkCgpjYXQoIi0gc2FuaXR5IGNoZWNraW5nIFBSSU9SIHRvIHNlbGVjdGlvbiIpCmxpYnJhcnkoZGF0YS50YWJsZSkKYWUuZ2VuZGVyIDwtIGlmZWxzZShBRURCJEdlbmRlciA9PSAwLCAiRmVtYWxlIiwgIk1hbGUiKQphZS5ob3NwaXRhbCA8LSBpZmVsc2UoQUVEQiRIb3NwaXRhbCA9PSAxLCAiQW50b25pdXMiLCAiVU1DVSIpCnRhYmxlKGFlLmdlbmRlciwgYWUuaG9zcGl0YWwsIGRubiA9IGMoIlNleCIsICJIb3NwaXRhbCIpKQphZS5nZW5kZXIgPC0gaWZlbHNlKEFFREIkR2VuZGVyID09IDAsICJGZW1hbGUiLCAiTWFsZSIpCnRhYmxlKGFlLmdlbmRlciwgQUVEQiRBcnRlcnlfc3VtbWFyeSwgZG5uID0gYygiU2V4IiwgIkFydGVyeSIpKQojIHRhYmxlKGFlLmdlbmRlciwgQUVEQiRpbmZvcm1lZGNvbnNlbnQsIGRubiA9IGMoIlNleCIsICJJQyIpKQoKcm0oYWUuZ2VuZGVyLCBhZS5ob3NwaXRhbCkKCiMgSSBjaGFuZ2UgbnVtZXJpYyBhbmQgZmFjdG9ycyBtYW51YWxseSBiZWNhdXNlLCB3ZWxsLCBJIHdvdWxkbid0IGtub3cgaG93IHRvIGZpeCBpdCBvdGhlcndpc2UKIyB0byBoYXZlIHRoaXMgJ3RpYmJsZScgd29yayB3aXRoICd0YWJsZW9uZScuLi4gOi0pCgpBRURCJEFnZSA8LSBhcy5udW1lcmljKEFFREIkQWdlKQpBRURCJGRpYXN0b2xpIDwtIGFzLm51bWVyaWMoQUVEQiRkaWFzdG9saSkKQUVEQiRzeXN0b2xpYyA8LSBhcy5udW1lcmljKEFFREIkc3lzdG9saWMpCgpBRURCJFRDX2ZpbmFsQ1UgPC0gYXMubnVtZXJpYyhBRURCJFRDX2ZpbmFsQ1UpCkFFREIkTERMX2ZpbmFsQ1UgPC0gYXMubnVtZXJpYyhBRURCJExETF9maW5hbENVKQpBRURCJEhETF9maW5hbENVIDwtIGFzLm51bWVyaWMoQUVEQiRIRExfZmluYWxDVSkKQUVEQiRUR19maW5hbENVIDwtIGFzLm51bWVyaWMoQUVEQiRUR19maW5hbENVKQoKQUVEQiRUQ19maW5hbCA8LSBhcy5udW1lcmljKEFFREIkVENfZmluYWwpCkFFREIkTERMX2ZpbmFsIDwtIGFzLm51bWVyaWMoQUVEQiRMRExfZmluYWwpCkFFREIkSERMX2ZpbmFsIDwtIGFzLm51bWVyaWMoQUVEQiRIRExfZmluYWwpCkFFREIkVEdfZmluYWwgPC0gYXMubnVtZXJpYyhBRURCJFRHX2ZpbmFsKQoKQUVEQiRBZ2UgPC0gYXMubnVtZXJpYyhBRURCJEFnZSkKQUVEQiRHRlJfTURSRCA8LSBhcy5udW1lcmljKEFFREIkR0ZSX01EUkQpCkFFREIkQk1JIDwtIGFzLm51bWVyaWMoQUVEQiRCTUkpCkFFREIkZUNpZ2FyZXR0ZXMgPC0gYXMubnVtZXJpYyhBRURCJGVDaWdhcmV0dGVzKQpBRURCJGVQYWNrWWVhcnNTbW9raW5nIDwtIGFzLm51bWVyaWMoQUVEQiRlUGFja1llYXJzU21va2luZykKQUVEQiRFUF9jb21wb3NpdGVfdGltZSA8LSBhcy5udW1lcmljKEFFREIkRVBfY29tcG9zaXRlX3RpbWUpCgpBRURCJG1hY21lYW4wIDwtIGFzLm51bWVyaWMoQUVEQiRtYWNtZWFuMCkKQUVEQiRzbWNtZWFuMCA8LSBhcy5udW1lcmljKEFFREIkc21jbWVhbjApCkFFREIkbmV1dHJvcGhpbHMgPC0gYXMubnVtZXJpYyhBRURCJG5ldXRyb3BoaWxzKQpBRURCJE1hc3RfY2VsbHNfcGxhcXVlIDwtIGFzLm51bWVyaWMoQUVEQiRNYXN0X2NlbGxzX3BsYXF1ZSkKQUVEQiR2ZXNzZWxfZGVuc2l0eV9hdmVyYWdlZCA8LSBhcy5udW1lcmljKEFFREIkdmVzc2VsX2RlbnNpdHlfYXZlcmFnZWQpCgojIElMNiwgSUw2UiwgTUNQMSBtZWFzdXJlbWVudHMKQUVEQiRJTDYgPC0gYXMubnVtZXJpYyhBRURCJElMNikgIyBGQUNTIHBsYXF1ZQpBRURCJElMNl9wZ191Z18yMDE1IDwtIGFzLm51bWVyaWMoQUVEQiRJTDZfcGdfdWdfMjAxNSkgIyBMVU1JTkVYIHBsYXF1ZQpBRURCJElMNlJfcGdfdWdfMjAxNSA8LSBhcy5udW1lcmljKEFFREIkSUw2Ul9wZ191Z18yMDE1KSAjIExVTUlORVggcGxhcXVlCkFFREIkTUNQMSA8LSBhcy5udW1lcmljKEFFREIkTUNQMSkgIyBMVU1JTkVYIHBsYXF1ZQpBRURCJE1DUDFfcGdfdWdfMjAxNSA8LSBhcy5udW1lcmljKEFFREIkTUNQMV9wZ191Z18yMDE1KSAjIExVTUlORVggcGxhcXVlCkFFREIkTUNQMV9wZ19tbF8yMDE1IDwtIGFzLm51bWVyaWMoQUVEQiRNQ1AxX3BnX21sXzIwMTUpICMgTFVNSU5FWCBwbGFxdWUKQUVEQiRoc0NSUF9wbGFzbWEgPC0gYXMubnVtZXJpYyhBRURCJGhzQ1JQX3BsYXNtYSkgIyBMVU1JTkVYCgpyZXF1aXJlKGxhYmVsbGVkKQpBRURCJE9SeWVhciA8LSB0b19mYWN0b3IoQUVEQiRPUnllYXIpCkFFREIkR2VuZGVyIDwtIHRvX2ZhY3RvcihBRURCJEdlbmRlcikKQUVEQiRIb3NwaXRhbCA8LSB0b19mYWN0b3IoQUVEQiRIb3NwaXRhbCkKQUVEQiRLRE9RSSA8LSB0b19mYWN0b3IoQUVEQiRLRE9RSSkKQUVEQiRCTUlfV0hPIDwtIHRvX2ZhY3RvcihBRURCJEJNSV9XSE8pCkFFREIkRGlhYmV0ZXNTdGF0dXMgPC0gdG9fZmFjdG9yKEFFREIkRGlhYmV0ZXNTdGF0dXMpCkFFREIkU21va2VyU3RhdHVzIDwtIHRvX2ZhY3RvcihBRURCJFNtb2tlclN0YXR1cykKQUVEQiRBbGNvaG9sVXNlIDwtIHRvX2ZhY3RvcihBRURCJEFsY29ob2xVc2UpCgpBRURCJEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0IDwtIHRvX2ZhY3RvcihBRURCJEh5cGVydGVuc2lvbjEpCkFFREIkSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnRkcnVnIDwtIHRvX2ZhY3RvcihBRURCJEh5cGVydGVuc2lvbjIpCkFFREIkSHlwZXJ0ZW5zaW9uLmNvbXBvc2l0ZSA8LSB0b19mYWN0b3IoQUVEQiRIeXBlcnRlbnNpb24uY29tcG9zaXRlKQpBRURCJEh5cGVydGVuc2lvbi5kcnVncyA8LSB0b19mYWN0b3IoQUVEQiRIeXBlcnRlbnNpb24uZHJ1Z3MpCgpBRURCJE1lZC5hbnRpY29hZ3VsYW50cyA8LSB0b19mYWN0b3IoQUVEQiRNZWQuYW50aWNvYWd1bGFudHMpCkFFREIkTWVkLmFsbC5hbnRpcGxhdGVsZXQgPC0gdG9fZmFjdG9yKEFFREIkTWVkLmFsbC5hbnRpcGxhdGVsZXQpCkFFREIkTWVkLlN0YXRpbi5MTEQgPC0gdG9fZmFjdG9yKEFFREIkTWVkLlN0YXRpbi5MTEQpCgpBRURCJFN0cm9rZV9EeCA8LSB0b19mYWN0b3IoQUVEQiRTdHJva2VfRHgpCkFFREIkQ0FEX2hpc3RvcnkgPC0gdG9fZmFjdG9yKEFFREIkQ0FEX2hpc3RvcnkpCkFFREIkUEFPRCA8LSB0b19mYWN0b3IoQUVEQiRQQU9EKQpBRURCJFBlcmlwaGVyYWwuaW50ZXJ2IDwtIHRvX2ZhY3RvcihBRURCJFBlcmlwaGVyYWwuaW50ZXJ2KQpBRURCJE1lZEh4X0NWRCA8LSB0b19mYWN0b3IoQUVEQiRNZWRIeF9DVkQpCgoKQUVEQiRzeW1wdCA8LSB0b19mYWN0b3IoQUVEQiRzeW1wdCkKQUVEQiRTeW1wdG9tcy4zZyA8LSB0b19mYWN0b3IoQUVEQiRTeW1wdG9tcy4zZykKQUVEQiRTeW1wdG9tcy40ZyA8LSB0b19mYWN0b3IoQUVEQiRTeW1wdG9tcy40ZykKQUVEQiRTeW1wdG9tcy41RyA8LSB0b19mYWN0b3IoQUVEQiRTeW1wdG9tcy41RykKQUVEQiRBc3ltcHRTeW1wdCA8LSB0b19mYWN0b3IoQUVEQiRBc3ltcHRTeW1wdCkKQUVEQiRBc3ltcHRTeW1wdDJHIDwtIHRvX2ZhY3RvcihBRURCJEFzeW1wdFN5bXB0MkcpCgoKQUVEQiRyZXN0ZW5vcyA8LSB0b19mYWN0b3IoQUVEQiRyZXN0ZW5vcykKQUVEQiRzdGVub3NlIDwtIHRvX2ZhY3RvcihBRURCJHN0ZW5vc2UpCkFFREIkRVBfY29tcG9zaXRlIDwtIHRvX2ZhY3RvcihBRURCJEVQX2NvbXBvc2l0ZSkKQUVEQiRNYWNyb3BoYWdlcy5iaW4gPC0gdG9fZmFjdG9yKEFFREIkTWFjcm9waGFnZXMuYmluKQpBRURCJFNNQy5iaW4gPC0gdG9fZmFjdG9yKEFFREIkU01DLmJpbikKQUVEQiRJUEguYmluIDwtIHRvX2ZhY3RvcihBRURCJElQSC5iaW4pCkFFREIkQ2FsYy5iaW4gPC0gdG9fZmFjdG9yKEFFREIkQ2FsYy5iaW4pCkFFREIkQ29sbGFnZW4uYmluIDwtIHRvX2ZhY3RvcihBRURCJENvbGxhZ2VuLmJpbikKQUVEQiRGYXQuYmluXzEwIDwtIHRvX2ZhY3RvcihBRURCJEZhdC5iaW5fMTApCkFFREIkRmF0LmJpbl80MCA8LSB0b19mYWN0b3IoQUVEQiRGYXQuYmluXzQwKQpBRURCJE92ZXJhbGxQbGFxdWVQaGVub3R5cGUgPC0gdG9fZmFjdG9yKEFFREIkT3ZlcmFsbFBsYXF1ZVBoZW5vdHlwZSkKCkFFREIkQXJ0ZXJ5X3N1bW1hcnkgPC0gdG9fZmFjdG9yKEFFREIkQXJ0ZXJ5X3N1bW1hcnkpCgpBRURCJGluZm9ybWVkY29uc2VudCA8LSB0b19mYWN0b3IoQUVEQiRpbmZvcm1lZGNvbnNlbnQpCgpBRURCLkNFQSA8LSBzdWJzZXQoQUVEQiwKICAgICAgICAgICAgICAgICAgICAoQXJ0ZXJ5X3N1bW1hcnkgPT0gImNhcm90aWQgKGxlZnQgJiByaWdodCkiIHwgQXJ0ZXJ5X3N1bW1hcnkgPT0gIm90aGVyIGNhcm90aWQgYXJ0ZXJpZXMgKGNvbW1vbiwgZXh0ZXJuYWwpIikgJiAjIHdlIG9ubHkgd2FudCBjYXJvdGlkcwogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAibWlzc2luZyIgJiAjIHdlIGFyZSByZWFsbHkgc3RyaWN0IGluIHNlbGVjdGluZyBiYXNlZCBvbiAnaW5mb3JtZWQgY29uc2VudCchCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJubywgZGllZCIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAieWVzLCBubyB0aXNzdWUsIG5vIGNvbW1lcmljYWwgYnVzaW5lc3MiICYKICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1lZGNvbnNlbnQgIT0gInllcywgbm8gdGlzc3VlLCBubyBxdWVzdGlvbm5haXJlcywgbm8gbWVkaWNhbCBpbmZvLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJ5ZXMsIG5vIHRpc3N1ZSwgbm8gcXVlc3Rpb25uYWlyZXMsIG5vIGhlYWx0aCB0cmVhdG1lbnQsIG5vIGNvbW1lcmljYWwgYnVzaW5lc3MiICYKICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1lZGNvbnNlbnQgIT0gInllcywgbm8gdGlzc3VlLCBubyBxdWVzdGlvbm5haXJlcywgbm8gaGVhbHRoIHRyZWF0bWVudCwgbm8gbWVkaWNhbCBpbmZvLCBubyBjb21tZXJjaWFsIGJ1c2luZXNzIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJ5ZXMsIG5vIHRpc3N1ZSwgbm8gaGVhbHRoIHRyZWF0bWVudCIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAieWVzLCBubyB0aXNzdWUsIG5vIHF1ZXN0aW9ubmFpcmVzIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJ5ZXMsIG5vIHRpc3N1ZSwgaGVhbHRoIHRyZWF0bWVudCB3aGVuIHBvc3NpYmxlIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJ5ZXMsIG5vIHRpc3N1ZSIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAieWVzLCBubyB0aXNzdWUsIG5vIHF1ZXN0aW9ubmFpcmVzLCBubyBoZWFsdGggdHJlYXRtZW50LCBubyBtZWRpY2FsIGluZm8iICYKICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1lZGNvbnNlbnQgIT0gInllcywgbm8gdGlzc3VlLCBubyBxdWVzdGlvbm5haXJlcywgbm8gaGVhbHRoIHRyZWF0bWVudCwgbm8gY29tbWVyY2lhbCBidXNpbmVzcyIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAibm8sIGRvZXNuJ3Qgd2FudCB0byIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAibm8sIHVuYWJsZSB0byBzaWduIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJubywgbm8gcmVhY3Rpb24iICYKICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1lZGNvbnNlbnQgIT0gIm5vLCBsb3N0IiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJubywgdG9vIG9sZCIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAieWVzLCBubyBtZWRpY2FsIGluZm8sIGhlYWx0aCB0cmVhdG1lbnQgd2hlbiBwb3NzaWJsZSIgJgogICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkY29uc2VudCAhPSAibm8gKG5ldmVyIGFza2VkIGZvciBJQyBiZWNhdXNlIHRoZXJlIHdhcyBubyB0aXNzdWUpIiAmCiAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWRjb25zZW50ICE9ICJubywgZW5kcG9pbnQiICYKICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1lZGNvbnNlbnQgIT0gIm5vb2l0IGdlaW5jbHVkZWVyZCIgJiAKICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKEFzeW1wdFN5bXB0MkcpKQojIEFFREIuQ0VBWzE6MTAsIDE6MTBdCmRpbShBRURCLkNFQSkKYGBgCgpgYGB7cn0KY2F0KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKQpjYXQoIkNSRUFURSBCQVNFTElORSBUQUJMRVxuIikKCiMgQmFzZWxpbmUgdGFibGUgdmFyaWFibGVzCmJhc2V0YWJsZV92YXJzID0gYygiSG9zcGl0YWwiLCAiT1J5ZWFyIiwKICAgICAgICAgICAgICAgICAgICJBZ2UiLCAiR2VuZGVyIiwgCiAgICAgICAgICAgICAgICAgICAiVENfZmluYWxDVSIsICJMRExfZmluYWxDVSIsICJIRExfZmluYWxDVSIsICJUR19maW5hbENVIiwgCiAgICAgICAgICAgICAgICAgICAiVENfZmluYWwiLCAiTERMX2ZpbmFsIiwgIkhETF9maW5hbCIsICJUR19maW5hbCIsIAogICAgICAgICAgICAgICAgICAgImhzQ1JQX3BsYXNtYSIsCiAgICAgICAgICAgICAgICAgICAic3lzdG9saWMiLCAiZGlhc3RvbGkiLCAiR0ZSX01EUkQiLCAiQk1JIiwgCiAgICAgICAgICAgICAgICAgICAiS0RPUUkiLCAiQk1JX1dITyIsCiAgICAgICAgICAgICAgICAgICAiU21va2VyU3RhdHVzIiwgIkFsY29ob2xVc2UiLAogICAgICAgICAgICAgICAgICAgIkRpYWJldGVzU3RhdHVzIiwgCiAgICAgICAgICAgICAgICAgICAiSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQiLCAiSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnRkcnVnIiwgIkh5cGVydGVuc2lvbi5jb21wb3NpdGUiLCAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwgCiAgICAgICAgICAgICAgICAgICAiTWVkLmFudGljb2FndWxhbnRzIiwgIk1lZC5hbGwuYW50aXBsYXRlbGV0IiwgIk1lZC5TdGF0aW4uTExEIiwgCiAgICAgICAgICAgICAgICAgICAiU3Ryb2tlX0R4IiwgInN5bXB0IiwgIlN5bXB0b21zLjVHIiwgIkFzeW1wdFN5bXB0IiwgIkFzeW1wdFN5bXB0MkciLAogICAgICAgICAgICAgICAgICAgInJlc3Rlbm9zIiwgInN0ZW5vc2UiLAogICAgICAgICAgICAgICAgICAgIk1lZEh4X0NWRCIsICJDQURfaGlzdG9yeSIsICJQQU9EIiwgIlBlcmlwaGVyYWwuaW50ZXJ2IiwgCiAgICAgICAgICAgICAgICAgICAiRVBfY29tcG9zaXRlIiwgIkVQX2NvbXBvc2l0ZV90aW1lIiwKICAgICAgICAgICAgICAgICAgICJtYWNtZWFuMCIsICJzbWNtZWFuMCIsICJNYWNyb3BoYWdlcy5iaW4iLCAiU01DLmJpbiIsCiAgICAgICAgICAgICAgICAgICAibmV1dHJvcGhpbHMiLCAiTWFzdF9jZWxsc19wbGFxdWUiLAogICAgICAgICAgICAgICAgICAgIklQSC5iaW4iLCAidmVzc2VsX2RlbnNpdHlfYXZlcmFnZWQiLAogICAgICAgICAgICAgICAgICAgIkNhbGMuYmluIiwgIkNvbGxhZ2VuLmJpbiIsIAogICAgICAgICAgICAgICAgICAgIkZhdC5iaW5fMTAiLCAiRmF0LmJpbl80MCIsICJPdmVyYWxsUGxhcXVlUGhlbm90eXBlIiwKICAgICAgICAgICAgICAgICAgICJJTDYiLCAiSUw2Ul9wZ19tbF8yMDE1IiwKICAgICAgICAgICAgICAgICAgICJNQ1AxIiwgIk1DUDFfcGdfbWxfMjAxNSIpCgpiYXNldGFibGVfYmluID0gYygiR2VuZGVyIiwgCiAgICAgICAgICAgICAgICAgICJLRE9RSSIsICJCTUlfV0hPIiwKICAgICAgICAgICAgICAgICAgIlNtb2tlclN0YXR1cyIsICJBbGNvaG9sVXNlIiwKICAgICAgICAgICAgICAgICAgIkRpYWJldGVzU3RhdHVzIiwgCiAgICAgICAgICAgICAgICAgICJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIsICJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydGRydWciLCAiSHlwZXJ0ZW5zaW9uLmNvbXBvc2l0ZSIsICJIeXBlcnRlbnNpb24uZHJ1Z3MiLCAKICAgICAgICAgICAgICAgICAgIk1lZC5hbnRpY29hZ3VsYW50cyIsICJNZWQuYWxsLmFudGlwbGF0ZWxldCIsICJNZWQuU3RhdGluLkxMRCIsIAogICAgICAgICAgICAgICAgICAiU3Ryb2tlX0R4IiwgInN5bXB0IiwgIlN5bXB0b21zLjVHIiwgIkFzeW1wdFN5bXB0IiwgIkFzeW1wdFN5bXB0MkciLAogICAgICAgICAgICAgICAgICAicmVzdGVub3MiLCAic3Rlbm9zZSIsCiAgICAgICAgICAgICAgICAgICJDQURfaGlzdG9yeSIsICJQQU9EIiwgIlBlcmlwaGVyYWwuaW50ZXJ2IiwgCiAgICAgICAgICAgICAgICAgICJFUF9jb21wb3NpdGUiLCAiTWFjcm9waGFnZXMuYmluIiwgIlNNQy5iaW4iLAogICAgICAgICAgICAgICAgICAiSVBILmJpbiIsIAogICAgICAgICAgICAgICAgICAiQ2FsYy5iaW4iLCAiQ29sbGFnZW4uYmluIiwgCiAgICAgICAgICAgICAgICAgICJGYXQuYmluXzEwIiwgIkZhdC5iaW5fNDAiLCAiT3ZlcmFsbFBsYXF1ZVBoZW5vdHlwZSIpCiMgYmFzZXRhYmxlX2JpbgoKYmFzZXRhYmxlX2NvbiA9IGJhc2V0YWJsZV92YXJzWyFiYXNldGFibGVfdmFycyAlaW4lIGJhc2V0YWJsZV9iaW5dCiMgYmFzZXRhYmxlX2NvbgpgYGAKCiMjIyBBbGwgcGF0aWVudHMKU2hvd2luZyB0aGUgYmFzZWxpbmUgdGFibGUgb2YgdGhlIHdob2xlIEF0aGVyby1FeHByZXNzIEJpb2JhbmsuCgpgYGB7ciBCYXNlbGluZSBBRURCOiBWaXN1YWxpemUgQUVEQn0KIyBDcmVhdGUgYmFzZWxpbmUgdGFibGVzCiMgaHR0cDovL3JzdHVkaW8tcHVicy1zdGF0aWMuczMuYW1hem9uYXdzLmNvbS8xMzMyMV9kYTMxNDYzM2RiOTI0ZGM3ODk4NmE4NTA4MTNhNTBkNS5odG1sCkFFREIudGFibGVPbmUgPSBwcmludChDcmVhdGVUYWJsZU9uZSh2YXJzID0gYmFzZXRhYmxlX3ZhcnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmFjdG9yVmFycyA9IGJhc2V0YWJsZV9iaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdHJhdGEgPSAiU3ltcHRvbXMuNGciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBBRURCLCBpbmNsdWRlTkEgPSBUUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubm9ybWFsID0gYygpLCBtaXNzaW5nID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IEZBTFNFLCBub1NwYWNlcyA9IEZBTFNFLCBzaG93QWxsTGV2ZWxzID0gVFJVRSwgZXhwbGFpbiA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICJwZiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnREaWdpdHMgPSAzKVssMTozXQpgYGAKCiMjIyBDRUEgcGF0aWVudHMKClNob3dpbmcgdGhlIGJhc2VsaW5lIHRhYmxlIG9mIHRoZSBDRUEgcGF0aWVudHMgaW4gdGhlIEF0aGVyby1FeHByZXNzIEJpb2JhbmsuCgpgYGB7ciBCYXNlbGluZSBBRURCOiBWaXN1YWxpemUgQUVEQiBDRUF9CiMgQ3JlYXRlIGJhc2VsaW5lIHRhYmxlcwojIGh0dHA6Ly9yc3R1ZGlvLXB1YnMtc3RhdGljLnMzLmFtYXpvbmF3cy5jb20vMTMzMjFfZGEzMTQ2MzNkYjkyNGRjNzg5ODZhODUwODEzYTUwZDUuaHRtbApBRURCLkNFQS50YWJsZU9uZSA9IHByaW50KENyZWF0ZVRhYmxlT25lKHZhcnMgPSBiYXNldGFibGVfdmFycywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWN0b3JWYXJzID0gYmFzZXRhYmxlX2JpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0cmF0YSA9ICJTeW1wdG9tcy40ZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEFFREIuQ0VBLCBpbmNsdWRlTkEgPSBUUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubm9ybWFsID0gYygpLCBtaXNzaW5nID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IEZBTFNFLCBub1NwYWNlcyA9IEZBTFNFLCBzaG93QWxsTGV2ZWxzID0gVFJVRSwgZXhwbGFpbiA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICJwZiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnREaWdpdHMgPSAzKVssMTozXQpgYGAKCiMjIyBDRUEgcGF0aWVudHMgd2l0aCBgTUNQMV9wZ19tbF8yMDE1YAoKU2hvd2luZyB0aGUgYmFzZWxpbmUgdGFibGUgb2YgdGhlIENFQSBwYXRpZW50cyBpbiB0aGUgQXRoZXJvLUV4cHJlc3MgQmlvYmFuayB3aXRoIGBNQ1AxX3BnX21sXzIwMTVgLgoKYGBge3IgQmFzZWxpbmUgQUVEQjogVmlzdWFsaXplIHN1YnNldENFQX0KQUVEQi5DRUEuc3Vic2V0IDwtIHN1YnNldChBRURCLkNFQSwgIWlzLm5hKE1DUDFfcGdfbWxfMjAxNSkpCgpBRURCLkNFQS5zdWJzZXQuQXN5bXB0U3ltcHQudGFibGVPbmUgPSBwcmludChDcmVhdGVUYWJsZU9uZSh2YXJzID0gYmFzZXRhYmxlX3ZhcnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmFjdG9yVmFycyA9IGJhc2V0YWJsZV9iaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRhID0gIkFzeW1wdFN5bXB0MkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBBRURCLkNFQS5zdWJzZXQsIGluY2x1ZGVOQSA9IFRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBub25ub3JtYWwgPSBjKCksIG1pc3NpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gRkFMU0UsIG5vU3BhY2VzID0gRkFMU0UsIHNob3dBbGxMZXZlbHMgPSBUUlVFLCBleHBsYWluID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gInBmIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udERpZ2l0cyA9IDMpWywxOjZdCmBgYAoKIyMjIENFQSBwYXRpZW50cyB3aXRoIGBNQ1AxX3BnX21sXzIwMTVgIGFuZCBgTUNQMWAKClNob3dpbmcgdGhlIGJhc2VsaW5lIHRhYmxlIG9mIHRoZSBDRUEgcGF0aWVudHMgaW4gdGhlIEF0aGVyby1FeHByZXNzIEJpb2Jhbmsgd2l0aCBgTUNQMV9wZ19tbF8yMDE1YCBfYW5kXyBgTUNQMWAuCgpgYGB7ciBCYXNlbGluZSBBRURCOiBWaXN1YWxpemUgc3Vic2V0Q0VBIHdpdGggTUNQMX0KCkFFREIuQ0VBLnN1YnNldC5jb21ibyA8LSBzdWJzZXQoQUVEQi5DRUEsICFpcy5uYShNQ1AxX3BnX21sXzIwMTUpIHwgIWlzLm5hKE1DUDEpKQoKQUVEQi5DRUEuc3Vic2V0LmNvbWJvLnRhYmxlT25lID0gcHJpbnQoQ3JlYXRlVGFibGVPbmUodmFycyA9IGJhc2V0YWJsZV92YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmFjdG9yVmFycyA9IGJhc2V0YWJsZV9iaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRhID0gIkFzeW1wdFN5bXB0MkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBBRURCLkNFQS5zdWJzZXQuY29tYm8sIGluY2x1ZGVOQSA9IFRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm5vcm1hbCA9IGMoKSwgbWlzc2luZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSBGQUxTRSwgbm9TcGFjZXMgPSBGQUxTRSwgc2hvd0FsbExldmVscyA9IFRSVUUsIGV4cGxhaW4gPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICJwZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udERpZ2l0cyA9IDMpWywxOjZdCmBgYAoKCldyaXRpbmcgdGhlIGJhc2VsaW5lIHRhYmxlIHRvIEV4Y2VsIGZvcm1hdC4gCmBgYHtyIEJhc2VsaW5lIEFFREI6IHdyaXRlfQojIFdyaXRlIGJhc2V0YWJsZQpyZXF1aXJlKG9wZW54bHN4KQoKd3JpdGUueGxzeChmaWxlID0gcGFzdGUwKEJBU0VMSU5FX2xvYywgIi8iLFRvZGF5LCIuIixQUk9KRUNUTkFNRSwiLkFFLkJhc2VsaW5lVGFibGUud2hvbGVDRUEueGxzeCIpLAogICAgICAgICAgIEFFREIuQ0VBLnRhYmxlT25lLCAKICAgICAgICAgICByb3cubmFtZXMgPSBUUlVFLCAKICAgICAgICAgICBjb2wubmFtZXMgPSBUUlVFLCAKICAgICAgICAgICBzaGVldE5hbWUgPSAid2hvbGVBRURCX0Jhc2VsaW5lIikKCndyaXRlLnhsc3goZmlsZSA9IHBhc3RlMChCQVNFTElORV9sb2MsICIvIixUb2RheSwiLiIsUFJPSkVDVE5BTUUsIi5BRS5CYXNlbGluZVRhYmxlLndob2xlQ0VBLkFzeW1wdFN5bXB0Lnhsc3giKSwKICAgICAgICAgICBBRURCLkNFQS5zdWJzZXQuQXN5bXB0U3ltcHQudGFibGVPbmUsIAogICAgICAgICAgIHJvdy5uYW1lcyA9IFRSVUUsIAogICAgICAgICAgIGNvbC5uYW1lcyA9IFRSVUUsIAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJ3aG9sZUFFREJfQmFzZWxpbmVfU3ltcHQiKQoKd3JpdGUueGxzeChmaWxlID0gcGFzdGUwKEJBU0VMSU5FX2xvYywgIi8iLFRvZGF5LCIuIixQUk9KRUNUTkFNRSwiLkFFLkJhc2VsaW5lVGFibGUuc3Vic2V0Q0VBLnhsc3giKSwKICAgICAgICAgICBBRURCLkNFQS5zdWJzZXQuY29tYm8udGFibGVPbmUsCiAgICAgICAgICAgcm93Lm5hbWVzID0gVFJVRSwKICAgICAgICAgICBjb2wubmFtZXMgPSBUUlVFLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJzdWJzZXRBRURCX0Jhc2VsaW5lIikKCmBgYAoKCiMjIERhdGEgZXhwbG9yYXRpb24KCkhlcmUgd2UgaW5zcGVjdCB0aGUgZGF0YSBhbmQgd2hlbiBuZWNlc3NhcnkgdHJhbnNmb3JtIHF1YW50aXRhdGl2ZSBtZWFzdXJlcy4gV2Ugd2lsbCBpbnNwZWN0IHRoZSByYXcsIGFuZCBgaW52ZXJzZS1yYW5rIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbmAgKHN0YW5kYXJkaXNlKS4gV2Uga25vdyB0aGF0IHRoZSBwcm90ZWlucyBhcmUgbm90IG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFuZCB0aGVyZWZvcmUgd2Ugd2lsbCBzdGFuZGFyZGlzZSB0aGVtIGFzIGZvbGxvd3M6IAoKYHogPSAoIHggLSDOvCApIC8gz4NgCgpXaGVyZSBmb3IgZWFjaCBzYW1wbGUsIGB4YCBlcXVhbHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYM68YCAoX211XykgZXF1YWxzIHRoZSBtZWFuIG9mIGB4YCwgYW5kIGDPg2AgKF9zaWdtYV8pIGVxdWFscyB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGB4YC4KCgojIyMgTUNQMSBwbGFxdWUgbGV2ZWxzOiBleHBlcmltZW50IDIKCldlIHdpbGwgZXhwbG9yZSB0aGUgcGxhcXVlIGxldmVscy4gQXMgbm90ZWQgYWJvdmUsIHdlIHdpbGwgdXNlIGBNQ1AxX3BnX21sXzIwMTVgLCB0aGlzIHdhcyBleHBlcmltZW50IDIgaW4gMjAxNSBvbiB0aGUgTFVNSU5FWC1wbGF0Zm9ybSBhbmQgbWVhc3VyZW1lbnRzIGFyZSBpbiBwZy9tTC4KCmBgYHtyIERhdGFFeHBsb3JhdGlvbjogTUNQMSBwbGFxdWUgRXhwMn0KCnN1bW1hcnkoQUVEQi5DRUEkTUNQMV9wZ19tbF8yMDE1KQoKZG8uY2FsbChyYmluZCAsIGJ5KEFFREIuQ0VBJE1DUDFfcGdfbWxfMjAxNSwgQUVEQi5DRUEkQXN5bXB0U3ltcHQyRywgc3VtbWFyeSkpCmBgYAoKYGBge3IgRGF0YUV4cGxvcmF0aW9uOiBNQ1AxIHBsYXF1ZSBFeHAyIHZpc3VhbH0KbGlicmFyeShwYXRjaHdvcmspCnAxIDwtIGdncHVicjo6Z2doaXN0b2dyYW0oQUVEQi5DRUEsICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwgCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgIGZpbGwgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzEyOTBEOSIsICIjREIwMDNGIiksIAogICAgICAgICAgICAgICAgICAgICMgYWRkID0gIm1lYW4iLCAKICAgICAgICAgICAgICAgICAgICAjIHJ1ZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgIyBhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLCAKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJNQ1AxIHBsYXF1ZSBsZXZlbHMiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAicGcvdWciLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQoKQUVEQi5DRUEkTUNQMV9wZ19tbF8yMDE1X3JhbmsgPC0gcW5vcm0oKHJhbmsoQUVEQi5DRUEkTUNQMV9wZ19tbF8yMDE1LCBuYS5sYXN0ID0gImtlZXAiKSAtIDAuNSkgLyBzdW0oIWlzLm5hKEFFREIuQ0VBJE1DUDFfcGdfbWxfMjAxNSkpKQpwMyA8LSBnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLAogICAgICAgICAgICAgICAgICAgIGFkZCA9ICJtZWFuIiwKICAgICAgICAgICAgICAgICAgICAjIHJ1ZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgIyBhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIk1DUDEgcGxhcXVlIGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJpbnZlcnNlLW5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBwZy9tTCIsCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKCnAxIApwMwojIGdncGFyKHAxLCBsZWdlbmQgPSAiIikgLyBnZ3BhcihwMiwgbGVnZW5kID0gIiIpICB8IGdncGFyKHAzLCBsZWdlbmQgPSAicmlnaHQiKQoKcm0ocDEsIHAzKQpgYGAKCgojIyMgTUNQMSBwbGFxdWUgbGV2ZWxzOiBleHBlcmltZW50IDEKCldlIHdpbGwgZXhwbG9yZSB0aGUgcGxhcXVlIGxldmVscy4gQXMgbm90ZWQgYWJvdmUsIHdlIHdpbGwgdXNlIGBNQ1AxYCwgdGhpcyB3YXMgZXhwZXJpbWVudCAxIG9uIHRoZSBMVU1JTkVYLXBsYXRmb3JtIGFuZCBtZWFzdXJlbWVudHMgYXJlIGluIHBnL21MLgoKYGBge3IgRGF0YUV4cGxvcmF0aW9uOiBNQ1AxIHBsYXF1ZSBFeHAxfQoKIyBzdW1tYXJ5KEFFREIuQ0VBJE1DUDEpCiMgCiMgZG8uY2FsbChyYmluZCAsIGJ5KEFFREIuQ0VBJE1DUDEsIEFFREIuQ0VBJEFzeW1wdFN5bXB0MkcsIHN1bW1hcnkpKQojIAphdHRhY2goQUVEQi5DRUEpCkFFREIuQ0VBJE1DUDFbTUNQMSA9PSAwXSA8LSBOQQpkZXRhY2goQUVEQi5DRUEpCgpzdW1tYXJ5KEFFREIuQ0VBJE1DUDEpCgpkby5jYWxsKHJiaW5kICwgYnkoQUVEQi5DRUEkTUNQMSwgQUVEQi5DRUEkQXN5bXB0U3ltcHQyRywgc3VtbWFyeSkpCgpgYGAKCmBgYHtyIERhdGFFeHBsb3JhdGlvbjogTUNQMSBwbGFxdWUgRXhwMSB2aXN1YWx9CnAxIDwtIGdncHVicjo6Z2doaXN0b2dyYW0oQUVEQi5DRUEsICJNQ1AxIiwgCiAgICAgICAgICAgICAgICAgICAgIyB5ID0gIi4uY291bnQuLiIsIAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLCAKICAgICAgICAgICAgICAgICAgICAjIGFkZCA9ICJtZWFuIiwgCiAgICAgICAgICAgICAgICAgICAgIyBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICMgYWRkLnBhcmFtcyA9ICBsaXN0KGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAyKSwgCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTUNQMSBwbGFxdWUgbGV2ZWxzIiwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gInBnL21MIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKCgpBRURCLkNFQSRNQ1AxX3JhbmsgPC0gcW5vcm0oKHJhbmsoQUVEQi5DRUEkTUNQMSwgbmEubGFzdCA9ICJrZWVwIikgLSAwLjUpIC8gc3VtKCFpcy5uYShBRURCLkNFQSRNQ1AxKSkpCnAzIDwtIGdncHVicjo6Z2doaXN0b2dyYW0oQUVEQi5DRUEsICJNQ1AxX3JhbmsiLAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLAogICAgICAgICAgICAgICAgICAgIGFkZCA9ICJtZWFuIiwKICAgICAgICAgICAgICAgICAgICAjIHJ1ZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgIyBhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIk1DUDEgcGxhcXVlIGxldmVscyIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJpbnZlcnNlLW5vcm1hbCB0cmFuc2Zvcm1hdGlvbiBwZy9tTCIsCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKCnAxIApwMwojIGdncGFyKHAxLCBsZWdlbmQgPSAiIikgLyBnZ3BhcihwMiwgbGVnZW5kID0gIiIpICB8IGdncGFyKHAzLCBsZWdlbmQgPSAicmlnaHQiKQoKcm0ocDEsIHAzKQoKYGBgCgojIyMjIENvcnJlbGF0aW9ucyBiZXR3ZWVuIE1DUDEgcGxhcXVlIGxldmVscyBhbmQgdHJhbnNmb3JtYXRpb25zCgpIZXJlIHdlIGNvbXBhcmUgdGhlIE1DUDEgcGxhcXVlIGxldmVscyBmcm9tIGV4cGVyaW1lbnQgMSB3aXRoIHRob3NlIGV4cGVyaW1lbnQgMi4gCgpgYGB7ciBNQ1AxIHNjYXR0ZXJzOiB0cmFuc2Zvcm1hdGlvbnN9CnAxIDwtIGdncHVicjo6Z2dzY2F0dGVyKEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgICAgICAgeCA9ICJNQ1AxX3JhbmsiLCAKICAgICAgICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiMxMjkwRDkiLAogICAgICAgICAgICAgICAgICAgICAgICAjIGZpbGwgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIyBwYWxldHRlID0gYygiIzEyOTBEOSIsICIjREIwMDNGIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZC5wYXJhbXMgPSAgbGlzdChjb2xvciA9ICJibGFjayIsIGxpbmV0eXBlID0gMiksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvci5jb2VmID0gVFJVRSwgY29yLm1ldGhvZCA9ICJzcGVhcm1hbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZXhwZXJpbWVudCAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgeWxhYiA9ICJleHBlcmltZW50IDIiLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJNQ1AxIHBsYXF1ZSBsZXZlbHMsIElOVCwgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCgpwMSAKCmBgYAoKCgoKCiMjIFByZWxpbWluYXJ5IGNvbmNsdXNpb24gZGF0YSBleHBsb3JhdGlvbgoKQmFzZWQgb24gdGhlIGBpbnZlcnNlLXJhbmsgbm9ybWFsIHRyYW5zZm9ybWF0aW9uYCB3ZSBjb25jbHVkZSB0aGVyZSBhcmUgbm8gb3V0bGllcnMgYW5kIHRoZSBkYXRhIGFwcHJveGltYXRlcyBhIG5vcm1hbCBkaXN0cmlidXRpb24uIFdlIHdpbGwgYXBwbHkgYGludmVyc2UtcmFuayBub3JtYWwgdHJhbnNmb3JtYXRpb25gIG9uIGFsbCBwcm90ZWlucyBhbmQgZm9jdXMgdGhlIGFuYWx5c2lzIG9uIE1DUDEgaW4gcGxhcXVlLgoKIyBBbmFseXNlcwoKVGhlIGFuYWx5c2VzIGFyZSBmb2N1c2VkIG9uIHRocmVlIGVsZW1lbnRzOiAKCjEpIHBsYXF1ZSB2dWxuZXJhYmlsaXR5IHBoZW5vdHlwZXMKMikgY2xpbmljYWwgc3RhdHVzIGF0IGluY2x1c2lvbiAoc3ltcHRvbXMpCjMpIHNlY29uZGFyeSBjbGluaWNhbCBvdXRjb21lIGR1cmluZyB0aHJlZSAoMykgeWVhcnMgb2YgZm9sbG93LXVwCgojIyBDb3ZhcmlhdGVzICYgb3RoZXIgdmFyaWFibGVzCgoxLiAgQWdlIChjb250aW51b3VzIGluIDEteWVhciBpbmNyZW1lbnQpLiBbYEFnZWBdCjIuICBTZXggKG1hbGUgdnMuIGZlbWFsZSkuIFtgR2VuZGVyYF0KMy4gIFByZXNlbmNlIG9mIGh5cGVydGVuc2lvbiBhdCBiYXNlbGluZSAoZGVmaW5lZCBlaXRoZXIgYXMgaGlzdG9yeSBvZiBoeXBlcnRlbnNpb24sIFNCUCDiiaUxNDAgbW0gSGcsIERCUCDiiaU5MCBtbSBIZywgb3IgcHJlc2NyaXB0aW9uIG9mIGFudGloeXBlcnRlbnNpdmUgbWVkaWNhdGlvbnMpLiBbYEh5cGVydGVuc2lvbi5jb21wb3NpdGVgXQo0LiAgUHJlc2VuY2Ugb2YgZGlhYmV0ZXMgbWVsbGl0dXMgYXQgYmFzZWxpbmUgKGRlZmluZWQgZWl0aGVyIGFzIGEgaGlzdG9yeSBvZiBkaWFiZXRlcyBhbmQvb3IgYWRtaW5pc3RyYXRpb24gb2YgZ2x1Y29zZSBsb3dlcmluZyBtZWRpY2F0aW9uKS4gW2BEaWFiZXRlc1N0YXR1c2BdCjUuICBTbW9raW5nIChjdXJyZW50LCBleC0sIG5ldmVyKS4gW2BTbW9rZXJTdGF0dXNgXQo2LiAgTERMLUMgbGV2ZWxzIChjb250aW51b3VzKS4gW2BMRExfZmluYWxgXQo3LiAgVXNlIG9mIGxpcGlkLWxvd2VyaW5nIGRydWdzLiBbYE1lZC5TdGF0aW4uTExEYF0KOC4gIFVzZSBvZiBhbnRpcGxhdGVsZXQgZHJ1Z3MuIFtgTWVkLmFsbC5hbnRpcGxhdGVsZXRgXQo5LiAgZUdGUiAoY29udGludW91cykuIFtgR0ZSX01EUkRgXQoxMC4JQk1JIChjb250aW51b3VzKS4gW2BCTUlgXQoxMS4JSGlzdG9yeSBvZiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIChzdHJva2UsIGNvcm9uYXJ5IGFydGVyeSBkaXNlYXNlLCBwZXJpcGhlcmFsIGFydGVyeSBkaXNlYXNlKS4gW2BNZWRIeF9DVkRgXSBjb21iaW5hdGlvbiBvZiBbYENBRF9oaXN0b3J5YCwgYFN0cm9rZV9oaXN0b3J5YCwgYFBlcmlwaGVyYWwuaW50ZXJ2YF0KMTIuCUxldmVsIG9mIHN0ZW5vc2lzICg1MC03MCUgdnMuIDcwLTk5JSkuIFtgc3Rlbm9zZWBdCjEzLiBZZWFyIG9mIHN1cmdlcnkgW2BPUmRhdGVfeWVhcmBdIGFzIHdlIGRpc2NvdmVyZWQgaW4gVmFuIExhbW1lcmVuIF9ldCBhbC5fIHRoZSBjb21wb3NpdGlvbiBvZiB0aGUgcGxhcXVlIGFuZCB0aGVyZWZvcmUgdGhlIEF0aGVyby1FeHByZXNzIEJpb2JhbmsgU3R1ZHkgaGFzIGNoYW5nZWQgb3ZlciB0aGUgeWVhcnMuIExpa2VseSB0aHJvdWdoIGNoYW5nZXMgaW4gbGlmZXN0eWxlIGFuZCBwcmltYXJ5IHByZXZlbnRpb24gcmVnaW1lcy4KCiMjIE1vZGVscwoKV2Ugd2lsbCBhbmFseXplIHRoZSBkYXRhIHRocm91Z2ggZm91ciBkaWZmZXJlbnQgbW9kZWxzCgotIE1vZGVsIDE6IGFkanVzdGVkIGZvciBhZ2UsIHNleCwgYW5kIHllYXIgb2Ygc3VyZ2VyeQotIE1vZGVsIDI6IGFkanVzdGVkIGZvciBhZ2UsIHNleCwgeWVhciBvZiBzdXJnZXJ5LCBhbmQgYWRkaXRpb25hbGx5IGFkanVzdGVkIGZvciBoaXN0b3J5IGh5cGVydGVuc2lvbiAoZGVmaW5lZCBmcm9tIG1lZGljYWwgaGlzdG9yeSBhbmQvb3IgdXNlIG9mIGFudGloeXBlcnRlbnNpdmUgbWVkaWNhdGlvbnMpLCBkaWFiZXRlcyAoZGVmaW5lZCBhcyBoaXN0b3J5IG9mIGEgZGlhZ25vc2lzIGFuZC9vciB1c2Ugb2YgZ2x1Y29zZS1sb3dlcmluZyBtZWRpY2F0aW9ucyksIGN1cnJlbnQgc21va2luZywgTERMLUMgbGV2ZWxzIGF0IHRpbWUgb2Ygb3BlcmF0aW9uLCB1c2Ugb2Ygc3RhdGlucywgdXNlIG9mIGFudGlwbGF0ZWxldCBhZ2VudHMsIGVHRlIsIEJNSSwgaGlzdG9yeSBvZiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIChjb3JvbmFyeSBhcnRlcnkgZGlzZWFzZSwgc3Ryb2tlLCBwZXJpcGhlcmFsIGFydGVyeSBkaXNlYXNlKSwgYW5kIGxldmVsIG9mIHN0ZW5vc2lzICg1MC03MCUsIDcwLTkwJSwgOTAtOTklKQoKIyMgQS4gQ3Jvc3Mtc2VjdGlvbmFsIGFuYWx5c2lzIHBsYXF1ZSBwaGVub3R5cGVzCgpJbiB0aGUgY3Jvc3Mtc2VjdGlvbmFsIGFuYWx5c2lzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyB3ZSB3aWxsIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgcGxhcXVlIHZ1bG5lcmFiaWxpdHkgcGhlbm90eXBlczoKCi0gUGVyY2VudGFnZSBvZiBtYWNyb3BoYWdlcyAoY29udGludW91cyB0cmFpdCkKLSBQZXJjZW50YWdlIG9mIFNNQ3MgKGNvbnRpbnVvdXMgdHJhaXQpCi0gTnVtYmVyIG9mIGludHJhcGxhcXVlIG1pY3JvdmVzc2VscyBwZXIgMy00IGhvdHNwb3RzIChjb250aW51b3VzIHRyYWl0KQotIFByZXNlbmNlIG9mIG1vZGVyYXRlL2hlYXZ5IGNhbGNpZmljYXRpb25zIChiaW5hcnkgdHJhaXQpCi0gUHJlc2VuY2Ugb2YgbW9kZXJhdGUvaGVhdnkgY29sbGFnZW4gY29udGVudCAoYmluYXJ5IHRyYWl0KQotIFByZXNlbmNlIG9mIGxpcGlkIGNvcmUgbm8vPDEwJSB2cy4gPjEwJSAoYmluYXJ5IHRyYWl0KQotIFByZXNlbmNlIG9mIGludHJhcGxhcXVlIGhlbW9ycmhhZ2UgKGJpbmFyeSB0cmFpdCkKCipDb250aW5vdXMgdHJhaXRzKgoKV2UgaW5zcGVjdCB0aGUgcGxhcXVlIGNoYXJhY3RlcmlzdGljcywgYW5kIGBpbnZlcnNlLXJhbmsgbm9ybWFsIHRyYW5zZm9ybWF0aW9uYCBjb250aW51b3VzIHBoZW5vdHlwZXMuCgpgYGB7ciBDcm9zc1NlYzogcGxhcXVlcyAtIHRyYW5zZm9ybWF0aW9ucyBhbmQgdmlzdWFsaXNhdGlvbnMgY29udGludW91c30KCiMgbWFjcm9waGFnZXMKY2F0KCJTdW1tYXJ5IG9mIGRhdGEuXG4iKQpzdW1tYXJ5KEFFREIuQ0VBJG1hY21lYW4wKQoKbWluX21hY21lYW4gPC0gbWluKEFFREIuQ0VBJG1hY21lYW4wLCBuYS5ybSA9IFRSVUUpCmNhdChwYXN0ZTAoIlxuTWluaW11bSB2YWx1ZSAlIG1hY3JvcGhhZ2VzOiAiLG1pbl9tYWNtZWFuLCIuXG4iKSkKCkFFREIuQ0VBJE1hY3JvcGhhZ2VzX0xOIDwtIGxvZyhBRURCLkNFQSRtYWNtZWFuMCArIG1pbl9tYWNtZWFuKQoKZ2dwdWJyOjpnZ2hpc3RvZ3JhbShBRURCLkNFQSwgIk1hY3JvcGhhZ2VzX0xOIiwgCiAgICAgICAgICAgICAgICAgICAgIyB5ID0gIi4uY291bnQuLiIsIAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLCAKICAgICAgICAgICAgICAgICAgICBhZGQgPSAibWVkaWFuIiwgCiAgICAgICAgICAgICAgICAgICAgI2FkZF9kZW5zaXR5ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICNhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLCAKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIlIG1hY3JvcGhhZ2VzIiwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gIm5hdHVyYWwgbG9nLXRyYW5zZm9ybWVkICUiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQoKQUVEQi5DRUEkTWFjcm9waGFnZXNfcmFuayA8LSBxbm9ybSgocmFuayhBRURCLkNFQSRtYWNtZWFuMCwgbmEubGFzdCA9ICJrZWVwIikgLSAwLjUpIC8gc3VtKCFpcy5uYShBRURCLkNFQSRtYWNtZWFuMCkpKQpnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiTWFjcm9waGFnZXNfcmFuayIsIAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLCAKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjMTI5MEQ5IiwgIiNEQjAwM0YiKSwgCiAgICAgICAgICAgICAgICAgICAgYWRkID0gIm1lZGlhbiIsIAogICAgICAgICAgICAgICAgICAgICNhZGRfZGVuc2l0eSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgcnVnID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAjYWRkLnBhcmFtcyA9ICBsaXN0KGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAyKSwgCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiJSBtYWNyb3BoYWdlcyIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJpbnZlcnNlLXJhbmsgbm9ybWFsaXplZCAlIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKCiMgc21vb3RoIG11c2NsZSBjZWxscwpjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCnN1bW1hcnkoQUVEQi5DRUEkbWFjbWVhbjApCgptaW5fc21jbWVhbiA8LSBtaW4oQUVEQi5DRUEkc21jbWVhbjAsIG5hLnJtID0gVFJVRSkKY2F0KHBhc3RlMCgiXG5NaW5pbXVtIHZhbHVlICUgc21vb3RoIG11c2NsZSBjZWxsczogIixtaW5fc21jbWVhbiwiLlxuIikpCgpBRURCLkNFQSRTTUNfTE4gPC0gbG9nKEFFREIuQ0VBJHNtY21lYW4wICsgbWluX3NtY21lYW4pCgpnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiU01DX0xOIiwgCiAgICAgICAgICAgICAgICAgICAgIyB5ID0gIi4uY291bnQuLiIsIAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLCAKICAgICAgICAgICAgICAgICAgICBhZGQgPSAibWVkaWFuIiwgCiAgICAgICAgICAgICAgICAgICAgI2FkZF9kZW5zaXR5ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICNhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLCAKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIlIHNtb290aCBtdXNjbGUgY2VsbHMiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAibmF0dXJhbCBsb2ctdHJhbnNmb3JtZWQgJSIsIAogICAgICAgICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCgpBRURCLkNFQSRTTUNfcmFuayA8LSBxbm9ybSgocmFuayhBRURCLkNFQSRzbWNtZWFuMCwgbmEubGFzdCA9ICJrZWVwIikgLSAwLjUpIC8gc3VtKCFpcy5uYShBRURCLkNFQSRzbWNtZWFuMCkpKQpnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiU01DX3JhbmsiLCAKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwgCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgIGZpbGwgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzEyOTBEOSIsICIjREIwMDNGIiksIAogICAgICAgICAgICAgICAgICAgIGFkZCA9ICJtZWRpYW4iLCAKICAgICAgICAgICAgICAgICAgICAjYWRkX2RlbnNpdHkgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgIHJ1ZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgI2FkZC5wYXJhbXMgPSAgbGlzdChjb2xvciA9ICJibGFjayIsIGxpbmV0eXBlID0gMiksIAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiUgc21vb3RoIG11c2NsZSBjZWxscyIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJpbnZlcnNlLXJhbmsgbm9ybWFsaXplZCAlIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKCiMgdmVzc2VsIGRlbnNpdHkKY2F0KCJTdW1tYXJ5IG9mIGRhdGEuXG4iKQpzdW1tYXJ5KEFFREIuQ0VBJHZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkKQoKbWluX3Zlc3NlbGRlbnNpdHkgPC0gbWluKEFFREIuQ0VBJHZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkLCBuYS5ybSA9IFRSVUUpCm1pbl92ZXNzZWxkZW5zaXR5CmNhdChwYXN0ZTAoIlxuTWluaW11bSB2YWx1ZSBudW1iZXIgb2YgaW50cmFwbGFxdWUgbmVvdmVzc2VscyBwZXIgMy00IGhvdHNwb3RzOiAiLG1pbl92ZXNzZWxkZW5zaXR5LCIuXG4iKSkKCkFFREIuQ0VBJFZlc3NlbERlbnNpdHlfTE4gPC0gbG9nKEFFREIuQ0VBJHZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkICsgbWluX3Zlc3NlbGRlbnNpdHkpCgpnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiVmVzc2VsRGVuc2l0eV9MTiIsIAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLCAKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjMTI5MEQ5IiwgIiNEQjAwM0YiKSwgCiAgICAgICAgICAgICAgICAgICAgYWRkID0gIm1lZGlhbiIsIAogICAgICAgICAgICAgICAgICAgICNhZGRfZGVuc2l0eSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgcnVnID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAjYWRkLnBhcmFtcyA9ICBsaXN0KGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAyKSwgCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAibnVtYmVyIG9mIGludHJhcGxhcXVlIG5lb3Zlc3NlbHMgcGVyIDMtNCBob3RzcG90cyIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJuYXR1cmFsIGxvZy10cmFuc2Zvcm1lZCBudW1iZXIiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQoKQUVEQi5DRUEkVmVzc2VsRGVuc2l0eV9yYW5rIDwtIHFub3JtKChyYW5rKEFFREIuQ0VBJHZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkLCBuYS5sYXN0ID0gImtlZXAiKSAtIDAuNSkgLyBzdW0oIWlzLm5hKEFFREIuQ0VBJHZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkKSkpCmdncHVicjo6Z2doaXN0b2dyYW0oQUVEQi5DRUEsICJWZXNzZWxEZW5zaXR5X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwgCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgIGZpbGwgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzEyOTBEOSIsICIjREIwMDNGIiksIAogICAgICAgICAgICAgICAgICAgIGFkZCA9ICJtZWRpYW4iLCAKICAgICAgICAgICAgICAgICAgICAjYWRkX2RlbnNpdHkgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgIHJ1ZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgI2FkZC5wYXJhbXMgPSAgbGlzdChjb2xvciA9ICJibGFjayIsIGxpbmV0eXBlID0gMiksIAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIm51bWJlciBvZiBpbnRyYXBsYXF1ZSBuZW92ZXNzZWxzIHBlciAzLTQgaG90c3BvdHMiLAogICAgICAgICAgICAgICAgICAgeGxhYiA9ICJpbnZlcnNlLXJhbmsgbm9ybWFsaXplZCBudW1iZXIiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpgYGAKCkdpdmVuIHRoZWlyIHN0cm9uZyBjb3JyZWxhdGlvbiwgd2UgYWxzbyBpbnRyb2R1Y2UgYSBtYWNyb3BoYWdlcy9zbW9vdGggbXVzY2xlIGNlbGwgcmF0aW8uIFRoaXMgaXMgYSBwcm94eSBvZiB0aGUgZXh0ZW5kIHRvIHdoaWNoIGEgcGxhcXVlIGlzIGluZmxhbW1lZCAoJ3Vuc3RhYmxlJykgYXMgY29tcGFyZWQgdG8gJ3N0YWJsZScuIAoKYGBge3IgQ3Jvc3NTZWM6IHBsYXF1ZXMgLSB0cmFuc2Zvcm1hdGlvbnMgYW5kIHZpc3VhbGlzYXRpb25zIGNvbnRpbnVvdXMgTUFDLVNNQ30KCkFFREIuQ0VBJE1BQ19TTUNfcmF0aW8gPC0gQUVEQi5DRUEkbWFjbWVhbjAgLyBBRURCLkNFQSRzbWNtZWFuMAoKQUVEQi5DRUEkTUFDX1NNQ19yYXRpb19yYW5rICA8LSBxbm9ybSgocmFuayhBRURCLkNFQSRNQUNfU01DX3JhdGlvLCBuYS5sYXN0ID0gImtlZXAiKSAtIDAuNSkgLyBzdW0oIWlzLm5hKEFFREIuQ0VBJE1BQ19TTUNfcmF0aW8pKSkKCgpjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCnN1bW1hcnkoQUVEQi5DRUEkTWFjcm9waGFnZXNfcmFuaykKc3VtbWFyeShBRURCLkNFQSRTTUNfcmFuaykKc3VtbWFyeShBRURCLkNFQSRNQUNfU01DX3JhdGlvX3JhbmspCgpnZ3B1YnI6OmdnaGlzdG9ncmFtKEFFREIuQ0VBLCAiTUFDX1NNQ19yYXRpb19yYW5rIiwgCiAgICAgICAgICAgICAgICAgICAgIyB5ID0gIi4uY291bnQuLiIsIAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLCAKICAgICAgICAgICAgICAgICAgICBhZGQgPSAibWVkaWFuIiwgCiAgICAgICAgICAgICAgICAgICAgI2FkZF9kZW5zaXR5ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICNhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLCAKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJtYWNyb3BoYWdlcy9zbW9vdGggbXVzY2xlIGNlbGxzIHJhdGlvIiwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gImludmVyc2UtcmFuayBub3JtYWxpemVkIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKYGBgCgoKKkJpbmFyeSB0cmFpdHMqCmBgYHtyIENyb3NzU2VjOiBwbGFxdWVzIC0gdHJhbnNmb3JtYXRpb25zIGFuZCB2aXN1YWxpc2F0aW9ucyBiaW5hcnl9CgojIGNhbGNpZmljYXRpb24KY2F0KCJTdW1tYXJ5IG9mIGRhdGEuXG4iKQpzdW1tYXJ5KEFFREIuQ0VBJENhbGMuYmluKQpjb250cmFzdHMoQUVEQi5DRUEkQ2FsYy5iaW4pCgpBRURCLkNFQSRDYWxjaWZpY2F0aW9uUGxhcXVlIDwtIGFzLmZhY3RvcihBRURCLkNFQSRDYWxjLmJpbikKCmRmIDwtIEFFREIuQ0VBICU+JQogIGZpbHRlcighaXMubmEoQ2FsY2lmaWNhdGlvblBsYXF1ZSkpICU+JQogIGdyb3VwX2J5KEdlbmRlciwgQ2FsY2lmaWNhdGlvblBsYXF1ZSkgJT4lCnN1bW1hcmlzZShjb3VudHMgPSBuKCkpIAoKZ2dwdWJyOjpnZ2JhcnBsb3QoZGYsIHggPSAiQ2FsY2lmaWNhdGlvblBsYXF1ZSIsIHkgPSAiY291bnRzIiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFRSVUUsIGxhYi52anVzdCA9IDIsIGxhYi5jb2wgPSAiI0ZGRkZGRiIsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FsY2lmaWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJjYWxjaWZpY2F0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKcm0oZGYpCgojIGNvbGxhZ2VuCmNhdCgiU3VtbWFyeSBvZiBkYXRhLlxuIikKc3VtbWFyeShBRURCLkNFQSRDb2xsYWdlbi5iaW4pCmNvbnRyYXN0cyhBRURCLkNFQSRDb2xsYWdlbi5iaW4pCgpBRURCLkNFQSRDb2xsYWdlblBsYXF1ZSA8LSBhcy5mYWN0b3IoQUVEQi5DRUEkQ29sbGFnZW4uYmluKQoKZGYgPC0gQUVEQi5DRUEgJT4lCiAgZmlsdGVyKCFpcy5uYShDb2xsYWdlblBsYXF1ZSkpICU+JQogIGdyb3VwX2J5KEdlbmRlciwgQ29sbGFnZW5QbGFxdWUpICU+JQpzdW1tYXJpc2UoY291bnRzID0gbigpKSAKCmdncHVicjo6Z2diYXJwbG90KGRmLCB4ID0gIkNvbGxhZ2VuUGxhcXVlIiwgeSA9ICJjb3VudHMiLAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gVFJVRSwgbGFiLnZqdXN0ID0gMiwgbGFiLmNvbCA9ICIjRkZGRkZGIiwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDb2xsYWdlbiIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJjb2xsYWdlbiIsIAogICAgICAgICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCnJtKGRmKQoKIyBmYXQgMTAlCmNhdCgiU3VtbWFyeSBvZiBkYXRhLlxuIikKc3VtbWFyeShBRURCLkNFQSRGYXQuYmluXzEwKQpjb250cmFzdHMoQUVEQi5DRUEkRmF0LmJpbl8xMCkKCkFFREIuQ0VBJEZhdDEwUGVyYyA8LSBhcy5mYWN0b3IoQUVEQi5DRUEkRmF0LmJpbl8xMCkKCmRmIDwtIEFFREIuQ0VBICU+JQogIGZpbHRlcighaXMubmEoRmF0MTBQZXJjKSkgJT4lCiAgZ3JvdXBfYnkoR2VuZGVyLCBGYXQxMFBlcmMpICU+JQpzdW1tYXJpc2UoY291bnRzID0gbigpKSAKCmdncHVicjo6Z2diYXJwbG90KGRmLCB4ID0gIkZhdDEwUGVyYyIsIHkgPSAiY291bnRzIiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFRSVUUsIGxhYi52anVzdCA9IDIsIGxhYi5jb2wgPSAiI0ZGRkZGRiIsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiSW50cmFwbGFxdWUgZmF0IiwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gImludHJhcGxhcXVlIGZhdCIsIAogICAgICAgICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCnJtKGRmKQoKIyBtYWNyb3BoYWdlcyBiaW5uZWQKY2F0KCJTdW1tYXJ5IG9mIGRhdGEuXG4iKQpzdW1tYXJ5KEFFREIuQ0VBJE1hY3JvcGhhZ2VzLmJpbikKY29udHJhc3RzKEFFREIuQ0VBJE1hY3JvcGhhZ2VzLmJpbikKCkFFREIuQ0VBJE1BQ19iaW5uZWQgPC0gYXMuZmFjdG9yKEFFREIuQ0VBJE1hY3JvcGhhZ2VzLmJpbikKCmRmIDwtIEFFREIuQ0VBICU+JQogIGZpbHRlcighaXMubmEoTUFDX2Jpbm5lZCkpICU+JQogIGdyb3VwX2J5KEdlbmRlciwgTUFDX2Jpbm5lZCkgJT4lCnN1bW1hcmlzZShjb3VudHMgPSBuKCkpIAoKZ2dwdWJyOjpnZ2JhcnBsb3QoZGYsIHggPSAiTUFDX2Jpbm5lZCIsIHkgPSAiY291bnRzIiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFRSVUUsIGxhYi52anVzdCA9IDIsIGxhYi5jb2wgPSAiI0ZGRkZGRiIsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTWFjcm9waGFnZXMgKGJpbm5lZCkiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTWFjcm9waGFnZXMiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpybShkZikKCiMgbWFjcm9waGFnZXMgZ3JvdXBlZApjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCkFFREIuQ0VBJG1hY3JvcGhhZ2VzIDwtIGFzLmZhY3RvcihBRURCLkNFQSRtYWNyb3BoYWdlcykKc3VtbWFyeShBRURCLkNFQSRtYWNyb3BoYWdlcykKY29udHJhc3RzKEFFREIuQ0VBJG1hY3JvcGhhZ2VzKQoKQUVEQi5DRUEkTUFDX2dyb3VwZWQgPC0gYXMuZmFjdG9yKEFFREIuQ0VBJG1hY3JvcGhhZ2VzKQoKZGYgPC0gQUVEQi5DRUEgJT4lCiAgZmlsdGVyKCFpcy5uYShNQUNfZ3JvdXBlZCkpICU+JQogIGdyb3VwX2J5KEdlbmRlciwgTUFDX2dyb3VwZWQpICU+JQpzdW1tYXJpc2UoY291bnRzID0gbigpKSAKCmdncHVicjo6Z2diYXJwbG90KGRmLCB4ID0gIk1BQ19ncm91cGVkIiwgeSA9ICJjb3VudHMiLAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gVFJVRSwgbGFiLnZqdXN0ID0gMiwgbGFiLmNvbCA9ICIjRkZGRkZGIiwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJNYWNyb3BoYWdlcyAoZ3JvdXBlZCkiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTWFjcm9waGFnZXMiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpybShkZikKCiMgU01DIGJpbm5lZApjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCnN1bW1hcnkoQUVEQi5DRUEkU01DLmJpbikKY29udHJhc3RzKEFFREIuQ0VBJFNNQy5iaW4pCgpBRURCLkNFQSRTTUNfYmlubmVkIDwtIGFzLmZhY3RvcihBRURCLkNFQSRTTUMuYmluKQoKZGYgPC0gQUVEQi5DRUEgJT4lCiAgZmlsdGVyKCFpcy5uYShTTUNfYmlubmVkKSkgJT4lCiAgZ3JvdXBfYnkoR2VuZGVyLCBTTUNfYmlubmVkKSAlPiUKc3VtbWFyaXNlKGNvdW50cyA9IG4oKSkgCgpnZ3B1YnI6OmdnYmFycGxvdChkZiwgeCA9ICJTTUNfYmlubmVkIiwgeSA9ICJjb3VudHMiLAogICAgICAgICAgICAgICAgICAgICMgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgIGxhYmVsID0gVFJVRSwgbGFiLnZqdXN0ID0gMiwgbGFiLmNvbCA9ICIjRkZGRkZGIiwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJTTUMgKGJpbm5lZCkiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU01DIiwgCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKcm0oZGYpCgojIFNNQyBncm91cGVkCmNhdCgiU3VtbWFyeSBvZiBkYXRhLlxuIikKQUVEQi5DRUEkc21jIDwtIGFzLmZhY3RvcihBRURCLkNFQSRzbWMpCnN1bW1hcnkoQUVEQi5DRUEkc21jKQpjb250cmFzdHMoQUVEQi5DRUEkc21jKQoKQUVEQi5DRUEkU01DX2dyb3VwZWQgPC0gYXMuZmFjdG9yKEFFREIuQ0VBJHNtYykKCmRmIDwtIEFFREIuQ0VBICU+JQogIGZpbHRlcighaXMubmEoU01DX2dyb3VwZWQpKSAlPiUKICBncm91cF9ieShHZW5kZXIsIFNNQ19ncm91cGVkKSAlPiUKc3VtbWFyaXNlKGNvdW50cyA9IG4oKSkgCgpnZ3B1YnI6OmdnYmFycGxvdChkZiwgeCA9ICJTTUNfZ3JvdXBlZCIsIHkgPSAiY291bnRzIiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFRSVUUsIGxhYi52anVzdCA9IDIsIGxhYi5jb2wgPSAiI0ZGRkZGRiIsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiU01DIChncm91cGVkKSIsCiAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTTUMiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpybShkZikKCgojIElQSApjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCnN1bW1hcnkoQUVEQi5DRUEkSVBILmJpbikKY29udHJhc3RzKEFFREIuQ0VBJElQSC5iaW4pCgpBRURCLkNFQSRJUEggPC0gYXMuZmFjdG9yKEFFREIuQ0VBJElQSC5iaW4pCgpkZiA8LSBBRURCLkNFQSAlPiUKICBmaWx0ZXIoIWlzLm5hKElQSCkpICU+JQogIGdyb3VwX2J5KEdlbmRlciwgSVBIKSAlPiUKc3VtbWFyaXNlKGNvdW50cyA9IG4oKSkgCgpnZ3B1YnI6OmdnYmFycGxvdChkZiwgeCA9ICJJUEgiLCB5ID0gImNvdW50cyIsCiAgICAgICAgICAgICAgICAgICAgIyB5ID0gIi4uY291bnQuLiIsCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgIGZpbGwgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBUUlVFLCBsYWIudmp1c3QgPSAyLCBsYWIuY29sID0gIiNGRkZGRkYiLAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkludHJhcGxhcXVlIGhlbW9ycmhhZ2UiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiaW50cmFwbGFxdWUgaGVtb3JyaGFnZSIsIAogICAgICAgICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCnJtKGRmKQoKIyBTeW1wdG9tcwpjYXQoIlN1bW1hcnkgb2YgZGF0YS5cbiIpCnN1bW1hcnkoQUVEQi5DRUEkQXN5bXB0U3ltcHQpCmNvbnRyYXN0cyhBRURCLkNFQSRBc3ltcHRTeW1wdCkKCkFFREIuQ0VBJEFzeW1wdFN5bXB0IDwtIGFzLmZhY3RvcihBRURCLkNFQSRBc3ltcHRTeW1wdCkKCmRmIDwtIEFFREIuQ0VBICU+JQogIGZpbHRlcighaXMubmEoQXN5bXB0U3ltcHQpKSAlPiUKICBncm91cF9ieShHZW5kZXIsIEFzeW1wdFN5bXB0KSAlPiUKc3VtbWFyaXNlKGNvdW50cyA9IG4oKSkgCgpnZ3B1YnI6OmdnYmFycGxvdChkZiwgeCA9ICJBc3ltcHRTeW1wdCIsIHkgPSAiY291bnRzIiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IFRSVUUsIGxhYi52anVzdCA9IDIsIGxhYi5jb2wgPSAiI0ZGRkZGRiIsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiU3ltcHRvbXMiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAic3ltcHRvbXMiLCAKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpybShkZikKCmBgYAoKIyMjIyBDb3JyZWxhdGlvbnMgYmV0d2VlbiBNQ1AxIHBsYXF1ZSBsZXZlbHMgYW5kIHN1cmdlcnkgeWVhcgoKSGVyZSB3ZSBjb21wYXJlIHRoZSBNQ1AxIHBsYXF1ZSBsZXZlbHMgZnJvbSBleHBlcmltZW50IDEgd2l0aCB0aG9zZSBleHBlcmltZW50IDIuIFRoZSBsYXR0ZXIgd2UgbWVhc3VyZWQgaW4gcGcvbUwgYW5kIGFsc28gY29ycmVjdGVkIGZvciB0aGUgdG90YWwgcHJvdGVpbiBjb250ZW50IChwZy91ZykuCgpgYGB7ciBNQ1AxIHNjYXR0ZXJzOiB5ZWFyIG9mIHN1cmdlcnl9CnAxIDwtIGdncHVicjo6Z2dzY2F0dGVyKEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgICAgICAgeCA9ICJPUnllYXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3JhbmsiLAogICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjMTI5MEQ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICMgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLAogICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSAicmVnLmxpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICBhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLAogICAgICAgICAgICAgICAgICAgICAgICBjb3IuY29lZiA9IFRSVUUsIGNvci5tZXRob2QgPSAic3BlYXJtYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB4bGFiID0gInllYXIgb2Ygc3VyZ2VyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHlsYWIgPSAiZXhwZXJpbWVudCAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTUNQMSBwbGFxdWUgbGV2ZWxzLCBJTlQsIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQoKcDEgCgpwMiA8LSBnZ3B1YnI6Omdnc2NhdHRlcihBRURCLkNFQSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHggPSAiT1J5ZWFyIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLAogICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjMTI5MEQ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxsID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICMgcGFsZXR0ZSA9IGMoIiMxMjkwRDkiLCAiI0RCMDAzRiIpLAogICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSAicmVnLmxpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICBhZGQucGFyYW1zID0gIGxpc3QoY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9IDIpLAogICAgICAgICAgICAgICAgICAgICAgICBjb3IuY29lZiA9IFRSVUUsIGNvci5tZXRob2QgPSAic3BlYXJtYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB4bGFiID0gInllYXIgb2Ygc3VyZ2VyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHlsYWIgPSAiZXhwZXJpbWVudCAyLCBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTUNQMSBwbGFxdWUgbGV2ZWxzLCBJTlQsIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQoKcDIgCgpybShwMSwgcDIpCgpgYGAKCgpJbiB0aGlzIHNlY3Rpb24gd2UgbWFrZSBzb21lIHZhcmlhYmxlcyB0byBhc3Npc3Qgd2l0aCBhbmFseXNpcy4KYGBge3IgQ3Jvc3NTZWM6IHBsYXF1ZXMgLSBzZXR1cCByZWdyZXNzaW9uIH0KQUVEQi5DRUEuc2FtcGxlc2l6ZSA9IG5yb3coQUVEQi5DRUEpClRSQUlUUy5QUk9URUlOLlJBTksgPSBjKCJNQ1AxX3BnX21sXzIwMTVfcmFuayIsICJNQ1AxX3JhbmsiKQoKVFJBSVRTLkNPTi5SQU5LID0gYygiTWFjcm9waGFnZXNfcmFuayIsICJTTUNfcmFuayIsICJNQUNfU01DX3JhdGlvX3JhbmsiLCAiVmVzc2VsRGVuc2l0eV9yYW5rIikKClRSQUlUUy5CSU4gPSBjKCJDYWxjaWZpY2F0aW9uUGxhcXVlIiwgIkNvbGxhZ2VuUGxhcXVlIiwgIkZhdDEwUGVyYyIsICJJUEgiLAogICAgICAgICAgICAgICAiTUFDX2Jpbm5lZCIsICJTTUNfYmlubmVkIikKCgojICJIb3NwaXRhbCIsIAojICJBZ2UiLCAiR2VuZGVyIiwgCiMgIlRDX2ZpbmFsIiwgIkxETF9maW5hbCIsICJIRExfZmluYWwiLCAiVEdfZmluYWwiLCAKIyAic3lzdG9saWMiLCAiZGlhc3RvbGkiLCAiR0ZSX01EUkQiLCAiQk1JIiwgCiMgIktET1FJIiwgIkJNSV9XSE8iLAojICJTbW9rZXJDdXJyZW50IiwgImVDaWdhcmV0dGVzIiwgImVQYWNrWWVhcnNTbW9raW5nIiwKIyAiRGlhYmV0ZXNTdGF0dXMiLCAiSHlwZXJ0ZW5zaW9uLmNvbXBvc2l0ZSIsIAojICJIeXBlcnRlbnNpb24uZHJ1Z3MiLCAiTWVkLmFudGljb2FndWxhbnRzIiwgIk1lZC5hbGwuYW50aXBsYXRlbGV0IiwgIk1lZC5TdGF0aW4uTExEIiwgCiMgIlN0cm9rZV9EeCIsICJzeW1wdCIsICJTeW1wdG9tcy41RyIsICJyZXN0ZW5vcyIsCiMgIkVQX2NvbXBvc2l0ZSIsICJFUF9jb21wb3NpdGVfdGltZSIsCiMgIm1hY21lYW4wIiwgInNtY21lYW4wIiwgIk1hY3JvcGhhZ2VzLmJpbiIsICJTTUMuYmluIiwKIyAibmV1dHJvcGhpbHMiLCAiTWFzdF9jZWxsc19wbGFxdWUiLAojICJJUEguYmluIiwgInZlc3NlbF9kZW5zaXR5X2F2ZXJhZ2VkIiwKIyAiQ2FsYy5iaW4iLCAiQ29sbGFnZW4uYmluIiwgCiMgIkZhdC5iaW5fMTAiLCAiRmF0LmJpbl80MCIsICJPdmVyYWxsUGxhcXVlUGhlbm90eXBlIiwKIyAiSUw2X3BnX3VnXzIwMTUiLCAiTUNQMV9wZ191Z18yMDE1IiwgCiMgIlFDMjAxOF9GSUxURVIiLCAiQ0hJUCIsICJTQU1QTEVfVFlQRSIsCiMgIkNBRF9oaXN0b3J5IiwgIlN0cm9rZV9oaXN0b3J5IiwgIlBlcmlwaGVyYWwuaW50ZXJ2IiwKIyAic3Rlbm9zZSIKCiMgMS4gIEFnZSAoY29udGludW91cyBpbiAxLXllYXIgaW5jcmVtZW50KS4gW0FnZV0KIyAyLiAgU2V4IChtYWxlIHZzLiBmZW1hbGUpLiBbR2VuZGVyXQojIDMuICBQcmVzZW5jZSBvZiBoeXBlcnRlbnNpb24gYXQgYmFzZWxpbmUgKGRlZmluZWQgZWl0aGVyIGFzIGhpc3Rvcnkgb2YgaHlwZXJ0ZW5zaW9uLCBTQlAg4omlMTQwIG1tIEhnLCBEQlAg4omlOTAgbW0gSGcsIG9yIHByZXNjcmlwdGlvbiBvZiBhbnRpaHlwZXJ0ZW5zaXZlIG1lZGljYXRpb25zKS4gW0h5cGVydGVuc2lvbi5jb21wb3NpdGVdCiMgNC4gIFByZXNlbmNlIG9mIGRpYWJldGVzIG1lbGxpdHVzIGF0IGJhc2VsaW5lIChkZWZpbmVkIGVpdGhlciBhcyBhIGhpc3Rvcnkgb2YgZGlhYmV0ZXMsIGFkbWluaXN0cmF0aW9uIG9mIGdsdWNvc2UgbG93ZXJpbmcgbWVkaWNhdGlvbiwgSGJBMWMg4omlNi41JSwgZmFzdGluZyBnbHVjb3NlIOKJpTEyNiBtZy9kbCwgLm9yIHJhbmRvbSBnbHVjb3NlIGxldmVscyDiiaUyMDAgbWcvZGwpLiBbRGlhYmV0ZXNTdGF0dXNdCiMgNS4gIFNtb2tpbmcgKGN1cnJlbnQsIGV4LSwgbmV2ZXIpLiBbU21va2VyQ3VycmVudF0KIyA2LiAgTERMLUMgbGV2ZWxzIChjb250aW51b3VzKS4gW0xETF9maW5hbF0KIyA3LiAgVXNlIG9mIGxpcGlkLWxvd2VyaW5nIGRydWdzLiBbTWVkLlN0YXRpbi5MTERdCiMgOC4gIFVzZSBvZiBhbnRpcGxhdGVsZXQgZHJ1Z3MuIFtNZWQuYWxsLmFudGlwbGF0ZWxldF0KIyA5LiAgZUdGUiAoY29udGludW91cykuIFtHRlJfTURSRF0KIyAxMC4JQk1JIChjb250aW51b3VzKS4gW0JNSV0KIyAxMS4JSGlzdG9yeSBvZiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIChzdHJva2UsIGNvcm9uYXJ5IGFydGVyeSBkaXNlYXNlLCBwZXJpcGhlcmFsIGFydGVyeSBkaXNlYXNlKS4gW01lZEh4X0NWRF0gY29tYmluYXRpbm8gb2Y6IFtDQURfaGlzdG9yeSwgU3Ryb2tlX2hpc3RvcnksIFBlcmlwaGVyYWwuaW50ZXJ2XQojIDEyLglMZXZlbCBvZiBzdGVub3NpcyAoNTAtNzAlIHZzLiA3MC05OSUpLiBbc3Rlbm9zZV0KCiMgTW9kZWxzIAojIE1vZGVsIDE6IGFkanVzdGVkIGZvciBhZ2UgYW5kIHNleAojIE1vZGVsIDI6IGFkanVzdGVkIGZvciBhZ2UsIHNleCwgaHlwZXJ0ZW5zaW9uLCBkaWFiZXRlcywgc21va2luZywgTERMLUMgbGV2ZWxzLCBsaXBpZC1sb3dlcmluZyBkcnVncywgYW50aXBsYXRlbGV0IGRydWdzLCBlR0ZSLCBCTUksIGhpc3Rvcnkgb2YgQ1ZELCBsZXZlbCBvZiBzdGVub3NpcywKCkFFREIuQ0VBJE9SZGF0ZV9lcG9jaCA8LSBhcy5udW1lcmljKEFFREIuQ0VBJGRhdGVvaykKQUVEQi5DRUEkT1JkYXRlX3llYXIgPC0gYXMubnVtZXJpYyh5ZWFyKEFFREIuQ0VBJGRhdGVvaykpCgpjYXQoIlN1bW1hcnkgb2YgJ3llYXIgb2Ygc3VyZ2VyeScgaW4gJ2Vwb2NoJyAoKTsgY29kZWQgYXMgYG51bWVyaWMoKWBcbiIpCnN1bW1hcnkoQUVEQi5DRUEkT1JkYXRlX2Vwb2NoKQoKY2F0KCJcblN1bW1hcnkgb2YgJ3llYXIgb2Ygc3VyZ2VyeScgaW4gJ3llYXJzJyAoKTsgY29kZWQgYXMgYGZhY3RvcigpYFxuIikKdGFibGUoQUVEQi5DRUEkT1JkYXRlX3llYXIpCgpDT1ZBUklBVEVTX00xID0gYygiQWdlIiwgIkdlbmRlciIsICJPUmRhdGVfeWVhciIpCiMgQ09WQVJJQVRFU19NMSA9IGMoIkFnZSIsICJHZW5kZXIiLCAiT1JkYXRlX2Vwb2NoIikKCkNPVkFSSUFURVNfTTIgPSBjKENPVkFSSUFURVNfTTEsICAKICAgICAgICAgICAgICAgIkh5cGVydGVuc2lvbi5jb21wb3NpdGUiLCAiRGlhYmV0ZXNTdGF0dXMiLCAKICAgICAgICAgICAgICAgIlNtb2tlclN0YXR1cyIsIAogICAgICAgICAgICAgICAjICJTbW9rZXJDdXJyZW50IiwKICAgICAgICAgICAgICAgIk1lZC5TdGF0aW4uTExEIiwgIk1lZC5hbGwuYW50aXBsYXRlbGV0IiwgCiAgICAgICAgICAgICAgICJHRlJfTURSRCIsICJCTUkiLCAKICAgICAgICAgICAgICAgIyAiQ0FEX2hpc3RvcnkiLCAiU3Ryb2tlX2hpc3RvcnkiLCAiUGVyaXBoZXJhbC5pbnRlcnYiLCAKICAgICAgICAgICAgICAgIk1lZEh4X0NWRCIsCiAgICAgICAgICAgICAgICJzdGVub3NlIikKCiMgQ09WQVJJQVRFU19NMyA9IGMoQ09WQVJJQVRFU19NMiwgIkxETF9maW5hbCIpCgojIENPVkFSSUFURVNfTTQgPSBjKENPVkFSSUFURVNfTTIsICJoc0NSUF9wbGFzbWEiKQoKYGBgCgojIyMgTW9kZWwgMQoKSW4gdGhpcyBtb2RlbCB3ZSBjb3JyZWN0IGZvciBfQWdlXywgX0dlbmRlcl8sIGFuZCBfeWVhciBvZiBzdXJnZXJ5Xy4KCkhlcmUgd2UgdXNlIHRoZSBpbnZlcnNlLXJhbmsgbm9ybWFsaXplZCBkYXRhIC0gdmlzdWFsbHkgdGhpcyBpcyBtb3JlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkLgoKIyMjIyBRdWFudGl0YXRpdmUgcGxhcXVlIHRyYWl0cwoKQW5hbHlzaXMgb2YgY29udGludW91cy9xdWFudGl0YXRpdmUgcGxhcXVlIHRyYWl0cyBhcyBhIGZ1bmN0aW9uIG9mIHBsYXF1ZSBNQ1AxIGxldmVscy4KYGBge3IgQ3Jvc3NTZWM6IHBsYXF1ZXMgLSBsaW5lYXIgcmVncmVzc2lvbiBNT0RFTDEgUkFOSywgaW5jbHVkZT1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQoKR0xNLnJlc3VsdHMgPC0gZGF0YS5mcmFtZShtYXRyaXgoTkEsIG5jb2wgPSAxNSwgbnJvdyA9IDApKQpjYXQoIlJ1bm5pbmcgbGluZWFyIHJlZ3Jlc3Npb24uLi5cbiIpCmZvciAocHJvdGVpbiBpbiAxOmxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LKSkgewogIFBST1RFSU4gPSBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dCiAgY2F0KHBhc3RlMCgiXG5BbmFseXNpcyBvZiAiLFBST1RFSU4sIi5cbiIpKQogIGZvciAodHJhaXQgaW4gMTpsZW5ndGgoVFJBSVRTLkNPTi5SQU5LKSkgewogICAgVFJBSVQgPSBUUkFJVFMuQ09OLlJBTktbdHJhaXRdCiAgICBjYXQocGFzdGUwKCJcbi0gcHJvY2Vzc2luZyAiLFRSQUlULCJcblxuIikpCiAgICBjdXJyZW50REYgPC0gYXMuZGF0YS5mcmFtZShBRURCLkNFQSAlPiUKICAgICAgZHBseXI6OnNlbGVjdCguLCBQUk9URUlOLCBUUkFJVCwgQ09WQVJJQVRFU19NMSkgJT4lCiAgICAgIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkpICU+JQogICAgICBmaWx0ZXJfaWYofmlzLm51bWVyaWMoLiksIGFsbF92YXJzKCFpcy5pbmZpbml0ZSguKSkpCiAgICAjIGZvciBkZWJ1ZwogICAgIyBwcmludChEVDo6ZGF0YXRhYmxlKGN1cnJlbnRERikpCiAgICAjIHByaW50KG5yb3coY3VycmVudERGKSkKICAgICMgcHJpbnQoc3RyKGN1cnJlbnRERikpCiAgICAjIyMgdW5pdmFyaWF0ZQogICAgZml0IDwtIGxtKGN1cnJlbnRERlssUFJPVEVJTl0gfiBjdXJyZW50REZbLFRSQUlUXSArIEFnZSArIEdlbmRlciArIE9SZGF0ZV95ZWFyLCBkYXRhID0gY3VycmVudERGKQogICAgbW9kZWxfc3RlcCA8LSBzdGVwQUlDKGZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQogICAgcHJpbnQobW9kZWxfc3RlcCkKICAgIHByaW50KHN1bW1hcnkoZml0KSkKCiAgICBHTE0ucmVzdWx0cy5URU1QIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTUsIG5yb3cgPSAwKSkKICAgIEdMTS5yZXN1bHRzLlRFTVBbMSxdID0gR0xNLkNPTihmaXQsICJBRURCLkNFQSIsIFBST1RFSU4sIFRSQUlULCB2ZXJib3NlID0gVFJVRSkKICAgIEdMTS5yZXN1bHRzID0gcmJpbmQoR0xNLnJlc3VsdHMsIEdMTS5yZXN1bHRzLlRFTVApCiAgfQp9CmNhdCgiRWRpdCB0aGUgY29sdW1uIG5hbWVzLi4uXG4iKQpjb2xuYW1lcyhHTE0ucmVzdWx0cykgPSBjKCJEYXRhc2V0IiwgIlByZWRpY3RvciIsICJUcmFpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkJldGEiLCAicy5lLm0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiT1IiLCAibG93OTVDSSIsICJ1cDk1Q0kiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJULXZhbHVlIiwgIlAtdmFsdWUiLCAicl4yIiwgInJeMl9hZGoiLCAiQUVfTiIsICJNb2RlbF9OIiwgIlBlcmNfTWlzcyIpCgpjYXQoIkNvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpHTE0ucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkQmV0YSkKR0xNLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkcy5lLm0uKQpHTE0ucmVzdWx0cyRPUiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJE9SKQpHTE0ucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkbG93OTVDSSkKR0xNLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkdXA5NUNJKQpHTE0ucmVzdWx0cyRgVC12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgVC12YWx1ZWApCkdMTS5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBQLXZhbHVlYCkKR0xNLnJlc3VsdHMkYHJeMmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgcl4yYCkKR0xNLnJlc3VsdHMkYHJeMl9hZGpgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMl9hZGpgKQpHTE0ucmVzdWx0cyRgQUVfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgQUVfTmApCkdMTS5yZXN1bHRzJGBNb2RlbF9OYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBNb2RlbF9OYCkKR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2AgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUGVyY19NaXNzYCkKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIldyaXRpbmcgcmVzdWx0cyB0byBFeGNlbC1maWxlLi4uXG4iKQojIyMgVW5pdmFyaWF0ZQpsaWJyYXJ5KG9wZW54bHN4KQp3cml0ZS54bHN4KEdMTS5yZXN1bHRzLAogICAgICAgICAgIGZpbGUgPSBwYXN0ZTAoT1VUX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuQ29uLlVuaS5Qcm90ZWluLlBsYXF1ZVBoZW5vdHlwZXMuUkFOSy5NT0RFTDEueGxzeCIpLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBzaGVldE5hbWUgPSAiQ29uLlVuaS5QbGFxdWVQaGVubyIpCiMgUmVtb3ZpbmcgaW50ZXJtZWRpYXRlcwpjYXQoIlJlbW92aW5nIGludGVybWVkaWF0ZSBmaWxlcy4uLlxuIikKcm0oVFJBSVQsIHRyYWl0LCBjdXJyZW50REYsIEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QLCBmaXQsIG1vZGVsX3N0ZXApCgoKYGBgCgojIyMjIEJpbmFyeSBwbGFxdWUgdHJhaXRzCgpBbmFseXNpcyBvZiBiaW5hcnkgcGxhcXVlIHRyYWl0cyBhcyBhIGZ1bmN0aW9uIG9mIHBsYXF1ZSBNQ1AxIGxldmVscy4KYGBge3IgQ3Jvc3NTZWM6IHBsYXF1ZXMgLSBsb2dpc3RpYyByZWdyZXNzaW9uIE1PREVMMSBSQU5LLCBpbmNsdWRlPVRSVUUsIHBhZ2VkLnByaW50PVRSVUV9CgpHTE0ucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE2LCBucm93ID0gMCkpCmZvciAocHJvdGVpbiBpbiAxOmxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LKSkgewogIFBST1RFSU4gPSBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dCiAgY2F0KHBhc3RlMCgiXG5BbmFseXNpcyBvZiAiLFBST1RFSU4sIi5cbiIpKQogIGZvciAodHJhaXQgaW4gMTpsZW5ndGgoVFJBSVRTLkJJTikpIHsKICAgIFRSQUlUID0gVFJBSVRTLkJJTlt0cmFpdF0KICAgIGNhdChwYXN0ZTAoIlxuLSBwcm9jZXNzaW5nICIsVFJBSVQsIlxuXG4iKSkKICAgIGN1cnJlbnRERiA8LSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC4sIFBST1RFSU4sIFRSQUlULCBDT1ZBUklBVEVTX00xKSAlPiUKICAgICAgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSkgJT4lCiAgICAgIGZpbHRlcl9pZih+aXMubnVtZXJpYyguKSwgYWxsX3ZhcnMoIWlzLmluZmluaXRlKC4pKSkKICAgICMgZm9yIGRlYnVnCiAgICAjIHByaW50KERUOjpkYXRhdGFibGUoY3VycmVudERGKSkKICAgICMgcHJpbnQobnJvdyhjdXJyZW50REYpKQogICAgIyBwcmludChzdHIoY3VycmVudERGKSkKICAgICMgcHJpbnQoY2xhc3MoY3VycmVudERGWyxUUkFJVF0pKQogICAgIyMjIHVuaXZhcmlhdGUKICAgIGZpdCA8LSBnbG0oYXMuZmFjdG9yKGN1cnJlbnRERlssVFJBSVRdKSB+IGN1cnJlbnRERlssUFJPVEVJTl0gKyBBZ2UgKyBHZW5kZXIgKyBPUmRhdGVfeWVhciwKICAgICAgICAgICAgICBkYXRhICA9ICBjdXJyZW50REYsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKICAgIG1vZGVsX3N0ZXAgPC0gc3RlcEFJQyhmaXQsIGRpcmVjdGlvbiA9ICJib3RoIiwgdHJhY2UgPSBGQUxTRSkKICAgIHByaW50KG1vZGVsX3N0ZXApCiAgICBwcmludChzdW1tYXJ5KGZpdCkpCiAgICAKICAgIEdMTS5yZXN1bHRzLlRFTVAgPC0gZGF0YS5mcmFtZShtYXRyaXgoTkEsIG5jb2wgPSAxNiwgbnJvdyA9IDApKQogICAgR0xNLnJlc3VsdHMuVEVNUFsxLF0gPSBHTE0uQklOKGZpdCwgIkFFREIuQ0VBIiwgUFJPVEVJTiwgVFJBSVQsIHZlcmJvc2UgPSBUUlVFKQogICAgR0xNLnJlc3VsdHMgPSByYmluZChHTE0ucmVzdWx0cywgR0xNLnJlc3VsdHMuVEVNUCkKICB9Cn0KY2F0KCJFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKEdMTS5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiUHJlZGljdG9yIiwgIlRyYWl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmV0YSIsICJzLmUubS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJPUiIsICJsb3c5NUNJIiwgInVwOTVDSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlotdmFsdWUiLCAiUC12YWx1ZSIsICJyXjJfbCIsICJyXjJfY3MiLCAicl4yX25hZ2Vsa2Vya2UiLCAiQUVfTiIsICJNb2RlbF9OIiwgIlBlcmNfTWlzcyIpCgpjYXQoIkNvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpHTE0ucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkQmV0YSkKR0xNLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkcy5lLm0uKQpHTE0ucmVzdWx0cyRPUiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJE9SKQpHTE0ucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkbG93OTVDSSkKR0xNLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkdXA5NUNJKQpHTE0ucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgWi12YWx1ZWApCkdMTS5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBQLXZhbHVlYCkKR0xNLnJlc3VsdHMkYHJeMl9sYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfbGApCkdMTS5yZXN1bHRzJGByXjJfY3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMl9jc2ApCkdMTS5yZXN1bHRzJGByXjJfbmFnZWxrZXJrZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgcl4yX25hZ2Vsa2Vya2VgKQpHTE0ucmVzdWx0cyRgQUVfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgQUVfTmApCkdMTS5yZXN1bHRzJGBNb2RlbF9OYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBNb2RlbF9OYCkKR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2AgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUGVyY19NaXNzYCkKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIldyaXRpbmcgcmVzdWx0cyB0byBFeGNlbC1maWxlLi4uXG4iKQoKIyMjIFVuaXZhcmlhdGUKd3JpdGUueGxzeChHTE0ucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkJpbi5VbmkuUHJvdGVpbi5QbGFxdWVQaGVub3R5cGVzLlJBTksuTU9ERUwxLnhsc3giKSwKICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgc2hlZXROYW1lID0gIkJpbi5VbmkuUGxhcXVlUGhlbm8iKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiUmVtb3ZpbmcgaW50ZXJtZWRpYXRlIGZpbGVzLi4uXG4iKQpybShUUkFJVCwgdHJhaXQsIGN1cnJlbnRERiwgR0xNLnJlc3VsdHMsIEdMTS5yZXN1bHRzLlRFTVAsIGZpdCwgbW9kZWxfc3RlcCkKCmBgYAoKCiMjIyBNb2RlbCAyCgpJbiB0aGlzIG1vZGVsIHdlIGNvcnJlY3QgZm9yIF9BZ2VfLCBfR2VuZGVyXywgX3llYXIgb2Ygc3VyZ2VyeV8sIF9IeXBlcnRlbnNpb24gc3RhdHVzXywgX0RpYWJldGVzIHN0YXR1c18sIF9jdXJyZW50IHNtb2tlciBzdGF0dXNfLCBfbGlwaWQtbG93ZXJpbmcgZHJ1Z3MgKExMRHMpXywgX2FudGlwbGF0ZWxldCBtZWRpY2F0aW9uXywgX2VHRlIgKE1EUkQpXywgX0JNSV8sIF9NZWRIeF9DVkRfIChjb21iaW5hdGlvbiBvZiBfQ0FEIGhpc3RvcnlfLCBfc3Ryb2tlIGhpc3RvcnlfLCBhbmQgX3BlcmlwaGVyYWwgaW50ZXJ2ZW50aW9uc18pLCBhbmQgX3N0ZW5vc2lzXy4KCkhlcmUgd2UgdXNlIHRoZSBgaW52ZXJzZS1yYW5rIG5vcm1hbGl6ZWRgIGRhdGEgLSB2aXN1YWxseSB0aGlzIGlzIG1vcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQuCgojIyMjIFF1YW50aXRhdGl2ZSBwbGFxdWUgdHJhaXRzCgpBbmFseXNpcyBvZiBjb250aW51b3VzL3F1YW50aXRhdGl2ZSBwbGFxdWUgdHJhaXRzIGFzIGEgZnVuY3Rpb24gb2YgcGxhcXVlIE1DUDEgbGV2ZWxzLgpgYGB7ciBDcm9zc1NlYzogcGxhcXVlcyAtIGxpbmVhciByZWdyZXNzaW9uIE1PREVMMiBSQU5LLCBpbmNsdWRlPVRSVUUsIHBhZ2VkLnByaW50PVRSVUV9CgpHTE0ucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE1LCBucm93ID0gMCkpCmNhdCgiUnVubmluZyBsaW5lYXIgcmVncmVzc2lvbi4uLlxuIikKZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKSB7CiAgUFJPVEVJTiA9IFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0KICBjYXQocGFzdGUwKCJcbkFuYWx5c2lzIG9mICIsUFJPVEVJTiwiLlxuIikpCiAgZm9yICh0cmFpdCBpbiAxOmxlbmd0aChUUkFJVFMuQ09OLlJBTkspKSB7CiAgICBUUkFJVCA9IFRSQUlUUy5DT04uUkFOS1t0cmFpdF0KICAgIGNhdChwYXN0ZTAoIlxuLSBwcm9jZXNzaW5nICIsVFJBSVQsIlxuXG4iKSkKICAgIGN1cnJlbnRERiA8LSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC4sIFBST1RFSU4sIFRSQUlULCBDT1ZBUklBVEVTX00yKSAlPiUKICAgICAgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSkgJT4lCiAgICAgIGZpbHRlcl9pZih+aXMubnVtZXJpYyguKSwgYWxsX3ZhcnMoIWlzLmluZmluaXRlKC4pKSkKICAgICMgZm9yIGRlYnVnCiAgICAjIHByaW50KERUOjpkYXRhdGFibGUoY3VycmVudERGKSkKICAgICMgcHJpbnQobnJvdyhjdXJyZW50REYpKQogICAgIyBwcmludChzdHIoY3VycmVudERGKSkKICAgICMjIyB1bml2YXJpYXRlCiAgICBmaXQgPC0gbG0oY3VycmVudERGWyxQUk9URUlOXSB+IGN1cnJlbnRERlssVFJBSVRdICsgQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyAKICAgICAgICAgICAgICAgIEh5cGVydGVuc2lvbi5jb21wb3NpdGUgKyBEaWFiZXRlc1N0YXR1cyArIFNtb2tlclN0YXR1cyArIAogICAgICAgICAgICAgICAgTWVkLlN0YXRpbi5MTEQgKyBNZWQuYWxsLmFudGlwbGF0ZWxldCArIEdGUl9NRFJEICsgQk1JICsgCiAgICAgICAgICAgICAgICBNZWRIeF9DVkQgKyBzdGVub3NlLCAKICAgICAgICAgICAgICBkYXRhID0gY3VycmVudERGKQogICAgbW9kZWxfc3RlcCA8LSBzdGVwQUlDKGZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQogICAgcHJpbnQobW9kZWxfc3RlcCkKICAgIHByaW50KHN1bW1hcnkoZml0KSkKICAgIAogICAgR0xNLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE1LCBucm93ID0gMCkpCiAgICBHTE0ucmVzdWx0cy5URU1QWzEsXSA9IEdMTS5DT04oZml0LCAiQUVEQi5DRUEiLCBQUk9URUlOLCBUUkFJVCwgdmVyYm9zZSA9IFRSVUUpCiAgICBHTE0ucmVzdWx0cyA9IHJiaW5kKEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QKQogIH0KfQpjYXQoIkVkaXQgdGhlIGNvbHVtbiBuYW1lcy4uLlxuIikKY29sbmFtZXMoR0xNLnJlc3VsdHMpID0gYygiRGF0YXNldCIsICJQcmVkaWN0b3IiLCAiVHJhaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIk9SIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVC12YWx1ZSIsICJQLXZhbHVlIiwgInJeMiIsICJyXjJfYWRqIiwgIkFFX04iLCAiTW9kZWxfTiIsICJQZXJjX01pc3MiKQoKY2F0KCJDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKR0xNLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJEJldGEpCkdMTS5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHMuZS5tLikKR0xNLnJlc3VsdHMkT1IgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRPUikKR0xNLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGxvdzk1Q0kpCkdMTS5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHVwOTVDSSkKR0xNLnJlc3VsdHMkYFQtdmFsdWVgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFQtdmFsdWVgKQpHTE0ucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUC12YWx1ZWApCkdMTS5yZXN1bHRzJGByXjJgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMmApCkdMTS5yZXN1bHRzJGByXjJfYWRqYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfYWRqYCkKR0xNLnJlc3VsdHMkYEFFX05gIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYEFFX05gKQpHTE0ucmVzdWx0cyRgTW9kZWxfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgTW9kZWxfTmApCkdMTS5yZXN1bHRzJGBQZXJjX01pc3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2ApCgojIFNhdmUgdGhlIGRhdGEKY2F0KCJXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKIyMjIFVuaXZhcmlhdGUKbGlicmFyeShvcGVueGxzeCkKd3JpdGUueGxzeChHTE0ucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkNvbi5NdWx0aS5Qcm90ZWluLlBsYXF1ZVBoZW5vdHlwZXMuUkFOSy5NT0RFTDIueGxzeCIpLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBzaGVldE5hbWUgPSAiQ29uLk11bHRpLlBsYXF1ZVBoZW5vIikKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiUmVtb3ZpbmcgaW50ZXJtZWRpYXRlIGZpbGVzLi4uXG4iKQpybShUUkFJVCwgdHJhaXQsIGN1cnJlbnRERiwgR0xNLnJlc3VsdHMsIEdMTS5yZXN1bHRzLlRFTVAsIGZpdCwgbW9kZWxfc3RlcCkKCgpgYGAKCiMjIyMgQmluYXJ5IHBsYXF1ZSB0cmFpdHMKCkFuYWx5c2lzIG9mIGJpbmFyeSBwbGFxdWUgdHJhaXRzIGFzIGEgZnVuY3Rpb24gb2YgcGxhcXVlIE1DUDEgbGV2ZWxzLgpgYGB7ciBDcm9zc1NlYzogcGxhcXVlcyAtIGxvZ2lzdGljIHJlZ3Jlc3Npb24gTU9ERUwyIFJBTkssIGluY2x1ZGU9VFJVRSwgcGFnZWQucHJpbnQ9VFJVRX0KCkdMTS5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTYsIG5yb3cgPSAwKSkKZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKSB7CiAgUFJPVEVJTiA9IFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0KICBjYXQocGFzdGUwKCJcbkFuYWx5c2lzIG9mICIsUFJPVEVJTiwiLlxuIikpCiAgZm9yICh0cmFpdCBpbiAxOmxlbmd0aChUUkFJVFMuQklOKSkgewogICAgVFJBSVQgPSBUUkFJVFMuQklOW3RyYWl0XQogICAgY2F0KHBhc3RlMCgiXG4tIHByb2Nlc3NpbmcgIixUUkFJVCwiXG5cbiIpKQogICAgY3VycmVudERGIDwtIGFzLmRhdGEuZnJhbWUoQUVEQi5DRUEgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLiwgUFJPVEVJTiwgVFJBSVQsIENPVkFSSUFURVNfTTIpICU+JQogICAgICBmaWx0ZXIoY29tcGxldGUuY2FzZXMoLikpKSAlPiUKICAgICAgZmlsdGVyX2lmKH5pcy5udW1lcmljKC4pLCBhbGxfdmFycyghaXMuaW5maW5pdGUoLikpKQogICAgIyBmb3IgZGVidWcKICAgICMgcHJpbnQoRFQ6OmRhdGF0YWJsZShjdXJyZW50REYpKQogICAgIyBwcmludChucm93KGN1cnJlbnRERikpCiAgICAjIHByaW50KHN0cihjdXJyZW50REYpKQogICAgIyBwcmludChjbGFzcyhjdXJyZW50REZbLFRSQUlUXSkpCiAgICAjIyMgdW5pdmFyaWF0ZQogICAgZml0IDwtIGdsbShhcy5mYWN0b3IoY3VycmVudERGWyxUUkFJVF0pIH4gY3VycmVudERGWyxQUk9URUlOXSArIEFnZSArIEdlbmRlciArIE9SZGF0ZV95ZWFyICsgCiAgICAgICAgICAgICAgICBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyAKICAgICAgICAgICAgICAgIE1lZC5TdGF0aW4uTExEICsgTWVkLmFsbC5hbnRpcGxhdGVsZXQgKyBHRlJfTURSRCArIEJNSSArIAogICAgICAgICAgICAgICAgTWVkSHhfQ1ZEICsgc3Rlbm9zZSwgCiAgICAgICAgICAgICAgZGF0YSAgPSAgY3VycmVudERGLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpCiAgICBtb2RlbF9zdGVwIDwtIHN0ZXBBSUMoZml0LCBkaXJlY3Rpb24gPSAiYm90aCIsIHRyYWNlID0gRkFMU0UpCiAgICBwcmludChtb2RlbF9zdGVwKQogICAgcHJpbnQoc3VtbWFyeShmaXQpKQogICAgCiAgICBHTE0ucmVzdWx0cy5URU1QIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTYsIG5yb3cgPSAwKSkKICAgIEdMTS5yZXN1bHRzLlRFTVBbMSxdID0gR0xNLkJJTihmaXQsICJBRURCLkNFQSIsIFBST1RFSU4sIFRSQUlULCB2ZXJib3NlID0gVFJVRSkKICAgIEdMTS5yZXN1bHRzID0gcmJpbmQoR0xNLnJlc3VsdHMsIEdMTS5yZXN1bHRzLlRFTVApCiAgfQp9CmNhdCgiRWRpdCB0aGUgY29sdW1uIG5hbWVzLi4uXG4iKQpjb2xuYW1lcyhHTE0ucmVzdWx0cykgPSBjKCJEYXRhc2V0IiwgIlByZWRpY3RvciIsICJUcmFpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkJldGEiLCAicy5lLm0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiT1IiLCAibG93OTVDSSIsICJ1cDk1Q0kiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJaLXZhbHVlIiwgIlAtdmFsdWUiLCAicl4yX2wiLCAicl4yX2NzIiwgInJeMl9uYWdlbGtlcmtlIiwgIkFFX04iLCAiTW9kZWxfTiIsICJQZXJjX01pc3MiKQoKY2F0KCJDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKR0xNLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJEJldGEpCkdMTS5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHMuZS5tLikKR0xNLnJlc3VsdHMkT1IgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRPUikKR0xNLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGxvdzk1Q0kpCkdMTS5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHVwOTVDSSkKR0xNLnJlc3VsdHMkYFotdmFsdWVgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFotdmFsdWVgKQpHTE0ucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUC12YWx1ZWApCkdMTS5yZXN1bHRzJGByXjJfbGAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgcl4yX2xgKQpHTE0ucmVzdWx0cyRgcl4yX2NzYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfY3NgKQpHTE0ucmVzdWx0cyRgcl4yX25hZ2Vsa2Vya2VgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMl9uYWdlbGtlcmtlYCkKR0xNLnJlc3VsdHMkYEFFX05gIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYEFFX05gKQpHTE0ucmVzdWx0cyRgTW9kZWxfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgTW9kZWxfTmApCkdMTS5yZXN1bHRzJGBQZXJjX01pc3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2ApCgojIFNhdmUgdGhlIGRhdGEKY2F0KCJXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKCiMjIyBVbml2YXJpYXRlCndyaXRlLnhsc3goR0xNLnJlc3VsdHMsCiAgICAgICAgICAgZmlsZSA9IHBhc3RlMChPVVRfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5CaW4uTXVsdGkuUHJvdGVpbi5QbGFxdWVQaGVub3R5cGVzLlJBTksuTU9ERUwyLnhsc3giKSwKICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgc2hlZXROYW1lID0gIkJpbi5NdWx0aS5QbGFxdWVQaGVubyIpCgojIFJlbW92aW5nIGludGVybWVkaWF0ZXMKY2F0KCJSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRSQUlULCB0cmFpdCwgY3VycmVudERGLCBHTE0ucmVzdWx0cywgR0xNLnJlc3VsdHMuVEVNUCwgZml0LCBtb2RlbF9zdGVwKQoKYGBgCgoKIyMgQi4gQ3Jvc3Mtc2VjdGlvbmFsIGFuYWx5c2lzIHN5bXB0b21zCgpXZSB3aWxsIHBlcmZvcm0gYSBjcm9zcy1zZWN0aW9uYWwgYW5hbHlzaXMgYmV0d2VlbiBwbGFxdWUgTUNQMSBsZXZlbHMgYW5kIHRoZSAnY2xpbmljYWwgc3RhdHVzJyBvZiB0aGUgcGxhcXVlIGluIHRlcm1zIG9mIHByZXNlbmNlIG9mIHBhdGllbnRzJyBzeW1wdG9tcyAoc3ltcHRvbWF0aWMgdnMuIGFzeW1wdG9tYXRpYykuIFRoZSBzeW1wdG9tcyBvZiBpbnRlcmVzdCBhcmU6CgotIHN0cm9rZQotIFRJQQotIHJldGluYWwgaW5mYXJjdGlvbgotIGFtYXVyb3NpcyBmdWdheAotIGFzeW1wdG9tYXRpYwoKIyMjIE1vZGVsIDEKCkluIHRoaXMgbW9kZWwgd2UgY29ycmVjdCBmb3IgX0FnZV8sIF9HZW5kZXJfLCBhbmQgX3llYXIgb2Ygc3VyZ2VyeV8uCgoKYGBge3IgQ3Jvc3NTZWM6IHN5bXB0b21zIC0gbG9naXN0aWMgcmVncmVzc2lvbiBNT0RFTDEgUkFOSywgaW5jbHVkZT1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQpHTE0ucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE2LCBucm93ID0gMCkpCmZvciAocHJvdGVpbiBpbiAxOmxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LKSkgewogIFBST1RFSU4gPSBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dCiAgY2F0KHBhc3RlMCgiXG5BbmFseXNpcyBvZiAiLFBST1RFSU4sIi5cbiIpKQogIFRSQUlUID0gIkFzeW1wdFN5bXB0IgogICAgY2F0KHBhc3RlMCgiXG4tIHByb2Nlc3NpbmcgIixUUkFJVCwiXG5cbiIpKQogICAgY3VycmVudERGIDwtIGFzLmRhdGEuZnJhbWUoQUVEQi5DRUEgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLiwgUFJPVEVJTiwgVFJBSVQsIENPVkFSSUFURVNfTTEpICU+JQogICAgICBmaWx0ZXIoY29tcGxldGUuY2FzZXMoLikpKSAlPiUKICAgICAgZmlsdGVyX2lmKH5pcy5udW1lcmljKC4pLCBhbGxfdmFycyghaXMuaW5maW5pdGUoLikpKQogICAgIyBmb3IgZGVidWcKICAgICMgcHJpbnQoRFQ6OmRhdGF0YWJsZShjdXJyZW50REYpKQogICAgIyBwcmludChucm93KGN1cnJlbnRERikpCiAgICAjIHByaW50KHN0cihjdXJyZW50REYpKQogICAgIyBwcmludChjbGFzcyhjdXJyZW50REZbLFRSQUlUXSkpCiAgICAjIyMgdW5pdmFyaWF0ZQogICAgICMgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJDdXJyZW50ICsgCiAgICAgIyAgICAgICAgICAgIE1lZC5TdGF0aW4uTExEICsgTWVkLmFsbC5hbnRpcGxhdGVsZXQgKyBHRlJfTURSRCArIEJNSSArIAogICAgICMgICAgICAgICAgICBDQURfaGlzdG9yeSArIFN0cm9rZV9oaXN0b3J5ICsgUGVyaXBoZXJhbC5pbnRlcnYgKyBzdGVub3NlCiAgICBmaXQgPC0gZ2xtKGFzLmZhY3RvcihjdXJyZW50REZbLFRSQUlUXSkgfiBjdXJyZW50REZbLFBST1RFSU5dICsgQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIsIAogICAgICAgICAgICAgIGRhdGEgID0gIGN1cnJlbnRERiwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQogICAgbW9kZWxfc3RlcCA8LSBzdGVwQUlDKGZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQogICAgcHJpbnQobW9kZWxfc3RlcCkKICAgIHByaW50KHN1bW1hcnkoZml0KSkKICAgIAogICAgR0xNLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE2LCBucm93ID0gMCkpCiAgICBHTE0ucmVzdWx0cy5URU1QWzEsXSA9IEdMTS5CSU4oZml0LCAiQUVEQi5DRUEiLCBQUk9URUlOLCBUUkFJVCwgdmVyYm9zZSA9IFRSVUUpCiAgICBHTE0ucmVzdWx0cyA9IHJiaW5kKEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QKQogIH0KY2F0KCJFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKEdMTS5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiUHJlZGljdG9yIiwgIlRyYWl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmV0YSIsICJzLmUubS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJPUiIsICJsb3c5NUNJIiwgInVwOTVDSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlotdmFsdWUiLCAiUC12YWx1ZSIsICJyXjJfbCIsICJyXjJfY3MiLCAicl4yX25hZ2Vsa2Vya2UiLCAiQUVfTiIsICJNb2RlbF9OIiwgIlBlcmNfTWlzcyIpCgpjYXQoIkNvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpHTE0ucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkQmV0YSkKR0xNLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkcy5lLm0uKQpHTE0ucmVzdWx0cyRPUiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJE9SKQpHTE0ucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkbG93OTVDSSkKR0xNLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkdXA5NUNJKQpHTE0ucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgWi12YWx1ZWApCkdMTS5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBQLXZhbHVlYCkKR0xNLnJlc3VsdHMkYHJeMl9sYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfbGApCkdMTS5yZXN1bHRzJGByXjJfY3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMl9jc2ApCkdMTS5yZXN1bHRzJGByXjJfbmFnZWxrZXJrZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgcl4yX25hZ2Vsa2Vya2VgKQpHTE0ucmVzdWx0cyRgQUVfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgQUVfTmApCkdMTS5yZXN1bHRzJGBNb2RlbF9OYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBNb2RlbF9OYCkKR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2AgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUGVyY19NaXNzYCkKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIldyaXRpbmcgcmVzdWx0cyB0byBFeGNlbC1maWxlLi4uXG4iKQoKIyMjIFVuaXZhcmlhdGUKd3JpdGUueGxzeChHTE0ucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkJpbi5VbmkuUHJvdGVpbi5SQU5LLlN5bXB0b21zLk1PREVMMS54bHN4IiksCiAgICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UsIGNvbC5uYW1lcyA9IFRSVUUsIHNoZWV0TmFtZSA9ICJCaW4uVW5pLlN5bXB0b21zIikKCiMgUmVtb3ZpbmcgaW50ZXJtZWRpYXRlcwpjYXQoIlJlbW92aW5nIGludGVybWVkaWF0ZSBmaWxlcy4uLlxuIikKcm0oVFJBSVQsIGN1cnJlbnRERiwgR0xNLnJlc3VsdHMsIEdMTS5yZXN1bHRzLlRFTVAsIGZpdCwgbW9kZWxfc3RlcCkKCmBgYAoKIyMjIE1vZGVsIDIKCkluIHRoaXMgbW9kZWwgd2UgY29ycmVjdCBmb3IgX0FnZV8sIF9HZW5kZXJfLCBfSHlwZXJ0ZW5zaW9uIHN0YXR1c18sIF9EaWFiZXRlcyBzdGF0dXNfLCBfY3VycmVudCBzbW9rZXIgc3RhdHVzXywgX2xpcGlkLWxvd2VyaW5nIGRydWdzIChMTERzKV8sIF9hbnRpcGxhdGVsZXQgbWVkaWNhdGlvbl8sIF9lR0ZSIChNRFJEKV8sIF9CTUlfLCBfTWVkSHhfQ1ZEXyAoY29tYmluYXRpb24gb2YgX0NBRCBoaXN0b3J5XywgX3N0cm9rZSBoaXN0b3J5XywgYW5kIF9wZXJpcGhlcmFsIGludGVydmVudGlvbnNfKSwgYW5kIF9zdGVub3Npcy5fLgoKCmBgYHtyIENyb3NzU2VjOiBzeW1wdG9tcyAtIGxvZ2lzdGljIHJlZ3Jlc3Npb24gTU9ERUwyIFJBTkssIGluY2x1ZGU9VFJVRSwgcGFnZWQucHJpbnQ9VFJVRX0KCkdMTS5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTYsIG5yb3cgPSAwKSkKZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKSB7CiAgUFJPVEVJTiA9IFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0KICBjYXQocGFzdGUwKCJcbkFuYWx5c2lzIG9mICIsUFJPVEVJTiwiLlxuIikpCiAgVFJBSVQgPSAiQXN5bXB0U3ltcHQiCiAgICBjYXQocGFzdGUwKCJcbi0gcHJvY2Vzc2luZyAiLFRSQUlULCJcblxuIikpCiAgICBjdXJyZW50REYgPC0gYXMuZGF0YS5mcmFtZShBRURCLkNFQSAlPiUKICAgICAgZHBseXI6OnNlbGVjdCguLCBQUk9URUlOLCBUUkFJVCwgQ09WQVJJQVRFU19NMikgJT4lCiAgICAgIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkpICU+JQogICAgICBmaWx0ZXJfaWYofmlzLm51bWVyaWMoLiksIGFsbF92YXJzKCFpcy5pbmZpbml0ZSguKSkpCiAgICAjIGZvciBkZWJ1ZwogICAgIyBwcmludChEVDo6ZGF0YXRhYmxlKGN1cnJlbnRERikpCiAgICAjIHByaW50KG5yb3coY3VycmVudERGKSkKICAgICMgcHJpbnQoc3RyKGN1cnJlbnRERikpCiAgICAjIHByaW50KGNsYXNzKGN1cnJlbnRERlssVFJBSVRdKSkKICAgICMjIyB1bml2YXJpYXRlCgogICAgZml0IDwtIGdsbShhcy5mYWN0b3IoY3VycmVudERGWyxUUkFJVF0pIH4gY3VycmVudERGWyxQUk9URUlOXSArIEFnZSArIEdlbmRlciArIE9SZGF0ZV95ZWFyICsgCiAgICAgICAgICAgICAgICAgSHlwZXJ0ZW5zaW9uLmNvbXBvc2l0ZSArIERpYWJldGVzU3RhdHVzICsgU21va2VyU3RhdHVzICsgCiAgICAgICAgICAgICAgICAgTWVkLlN0YXRpbi5MTEQgKyBNZWQuYWxsLmFudGlwbGF0ZWxldCArIEdGUl9NRFJEICsgQk1JICsgCiAgICAgICAgICAgICAgICAgTWVkSHhfQ1ZEICsgc3Rlbm9zZSwgCiAgICAgICAgICAgICAgIGRhdGEgID0gIGN1cnJlbnRERiwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQogICAgbW9kZWxfc3RlcCA8LSBzdGVwQUlDKGZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQogICAgcHJpbnQobW9kZWxfc3RlcCkKICAgIHByaW50KHN1bW1hcnkoZml0KSkKICAgIAogICAgR0xNLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE2LCBucm93ID0gMCkpCiAgICBHTE0ucmVzdWx0cy5URU1QWzEsXSA9IEdMTS5CSU4oZml0LCAiQUVEQi5DRUEiLCBQUk9URUlOLCBUUkFJVCwgdmVyYm9zZSA9IFRSVUUpCiAgICBHTE0ucmVzdWx0cyA9IHJiaW5kKEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QKQogIH0KY2F0KCJFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKEdMTS5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiUHJlZGljdG9yIiwgIlRyYWl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmV0YSIsICJzLmUubS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJPUiIsICJsb3c5NUNJIiwgInVwOTVDSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlotdmFsdWUiLCAiUC12YWx1ZSIsICJyXjJfbCIsICJyXjJfY3MiLCAicl4yX25hZ2Vsa2Vya2UiLCAiQUVfTiIsICJNb2RlbF9OIiwgIlBlcmNfTWlzcyIpCgpjYXQoIkNvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpHTE0ucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkQmV0YSkKR0xNLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkcy5lLm0uKQpHTE0ucmVzdWx0cyRPUiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJE9SKQpHTE0ucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkbG93OTVDSSkKR0xNLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkdXA5NUNJKQpHTE0ucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgWi12YWx1ZWApCkdMTS5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBQLXZhbHVlYCkKR0xNLnJlc3VsdHMkYHJeMl9sYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfbGApCkdMTS5yZXN1bHRzJGByXjJfY3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMl9jc2ApCkdMTS5yZXN1bHRzJGByXjJfbmFnZWxrZXJrZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgcl4yX25hZ2Vsa2Vya2VgKQpHTE0ucmVzdWx0cyRgQUVfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgQUVfTmApCkdMTS5yZXN1bHRzJGBNb2RlbF9OYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGBNb2RlbF9OYCkKR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2AgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUGVyY19NaXNzYCkKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIldyaXRpbmcgcmVzdWx0cyB0byBFeGNlbC1maWxlLi4uXG4iKQoKIyMjIFVuaXZhcmlhdGUKd3JpdGUueGxzeChHTE0ucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkJpbi5NdWx0aS5Qcm90ZWluLlJBTksuU3ltcHRvbXMuTU9ERUwyLnhsc3giKSwKICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgc2hlZXROYW1lID0gIkJpbi5NdWx0aS5TeW1wdG9tcyIpCgojIFJlbW92aW5nIGludGVybWVkaWF0ZXMKY2F0KCJSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRSQUlULCBjdXJyZW50REYsIEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QLCBmaXQsIG1vZGVsX3N0ZXApCgpgYGAKCgojIyBDLiBMb25naXR1ZGluYWwgYW5hbHlzaXMgc2Vjb25kYXJ5IGNsaW5pY2FsIG91dGNvbWUKCkZvciB0aGUgbG9uZ2l0dWRpbmFsIGFuYWx5c2VzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyBhbmQgc2Vjb25kYXJ5IGNhcmRpb3Zhc2N1bGFyIGV2ZW50cyBvdmVyIGEgdGhyZWUteWVhciBmb2xsb3ctdXAgcGVyaW9kLiAKClRoZSBfcHJpbWFyeSBvdXRjb21lXyBpcyBkZWZpbmVkIGFzICJhIGNvbXBvc2l0ZSBvZiBmYXRhbCBvciBub24tZmF0YWwgbXlvY2FyZGlhbCBpbmZhcmN0aW9uLCBmYXRhbCBvciBub24tZmF0YWwgc3Ryb2tlLCBydXB0dXJlZCBhb3J0aWMgYW5ldXJ5c20sIGZhdGFsIGNhcmRpYWMgZmFpbHVyZSwgY29yb25hcnkgb3IgcGVyaXBoZXJhbCBpbnRlcnZlbnRpb25zLCBsZWcgYW1wdXRhdGlvbiBkdWUgdG8gdmFzY3VsYXIgY2F1c2VzLCBhbmQgY2FyZGlvdmFzY3VsYXIgZGVhdGgiLCBpLmUuIG1ham9yIGFkdmVyc2UgY2FyZGlvdmFzY3VsYXIgZXZlbnRzIChNQUNFKS4gVmFyaWFibGU6IGBlcG1ham9yLjN5ZWFyc2AsIHRoZXNlIGluY2x1ZGU6Ci0gbXlvY2FyZGlhbCBpbmZhcmN0aW9uIChNSSkKLSBjZXJlYnJhbCBpbmZhcmN0aW9uIChDVkEvc3Ryb2tlKQotIGNhcmRpb3Zhc2N1bGFyIGRlYXRoIChleGFjdCBjYXVzZSB0byBiZSBpbnZlc3RpZ2F0ZWQpCi0gY2VyZWJyYWwgYmxlZWRpbmcgKENWQS9zdHJva2UpCi0gZmF0YWwgbXlvY2FyZGlhbCBpbmZhcmN0aW9uIChNSSkKLSBmYXRhbCBjZXJlYnJhbCBpbmZhcmN0aW9uCi0gZmF0YWwgY2VyZWJyYWwgYmxlZWRpbmcKLSBzdWRkZW4gZGVhdGgKLSBmYXRhbCBoZWFydCBmYWlsdXJlCi0gZmF0YWwgYW5ldXJ5c20gcnVwdHVyZQotIG90aGVyIGNhcmRpb3Zhc2N1bGFyIGRlYXRoLi4KClRoZSBfc2Vjb25kYXJ5IG91dGNvbWVzXyB3aWxsIGJlIAoKLSBpbmNpZGVuY2Ugb2YgZmF0YWwgb3Igbm9uLWZhdGFsIHN0cm9rZSAoaXNjaGVtaWMgYW5kIGJsZWVkaW5nKSAtIHZhcmlhYmxlOiBgZXBzdHJva2UuM3llYXJzYCwgdGhlc2UgaW5jbHVkZToKICAtIGNlcmVicmFsIGluZmFyY3Rpb24gKENWQS9zdHJva2UpCiAgLSBjZXJlYnJhbCBibGVlZGluZyAoQ1ZBL3N0cm9rZSkKICAtIGZhdGFsIGNlcmVicmFsIGluZmFyY3Rpb24KICAtIGZhdGFsIGNlcmVicmFsIGJsZWVkaW5nLgotIGluY2lkZW5jZSBvZiBhY3V0ZSBjb3JvbmFyeSBldmVudHMgKGZhdGFsIG9yIG5vbi1mYXRhbCBteW9jYXJkaWFsIGluZmFyY3Rpb24sIGNvcm9uYXJ5IGludGVydmVudGlvbnMpIC0gdmFyaWFibGU6IGBlcGNvcm9uYXJ5LjN5ZWFyc2AsIHRoZXNlIGluY2x1ZGU6CiAgLSBteW9jYXJkaWFsIGluZmFyY3Rpb24gKE1JKQogIC0gY29yb25hcnkgYW5naW9wbGFzdHkgKFBDSS9QVENBKQogIC0gY2FyZGlvdmFzY3VsYXIgZGVhdGggKGV4YWN0IGNhdXNlIHRvIGJlIGludmVzdGlnYXRlZCkKICAtIGNvcm9uYXJ5IGJ5cGFzcyAoQ0FCRykKICAtIGZhdGFsIG15b2NhcmRpYWwgaW5mYXJjdGlvbiAoTUkpCiAgLSBzdWRkZW4gZGVhdGguCi0gY2FyZGlvdmFzY3VsYXIgZGVhdGggLSB2YXJpYWJsZTogYGVwY3ZkZWF0aC4zeWVhcnNgLCB0aGVzZSBpbmNsdWRlOgogIC0gY2FyZGlvdmFzY3VsYXIgZGVhdGggKGV4YWN0IGNhdXNlIHRvIGJlIGludmVzdGlnYXRlZCkKICAtIGZhdGFsIG15b2NhcmRpYWwgaW5mYXJjdGlvbiAoTUkpCiAgLSBmYXRhbCBjZXJlYnJhbCBpbmZhcmN0aW9uCiAgLSBmYXRhbCBjZXJlYnJhbCBibGVlZGluZwogIC0gc3VkZGVuIGRlYXRoCiAgLSBmYXRhbCBoZWFydCBmYWlsdXJlCiAgLSBmYXRhbCBhbmV1cnlzbSBydXB0dXJlCiAgLSBvdGhlciBjYXJkaW92YXNjdWxhciBkZWF0aC4uCgojIyMgMzAtIGFuZCA5MC1kYXlzIEZVIGV2ZW50cwoKV2Ugd2lsbCB1c2UgMy15ZWFyIGZvbGxvdy11cCwgYnV0IHdlIHdpbGwgYWxzbyBjYWxjdWxhdGUgMzAgZGF5cyBhbmQgOTAgZGF5cyBmb2xsb3ctdXAgJ3RpbWUtdG8tZXZlbnQnIHZhcmlhYmxlcy4gT24gYXZlcmFnZSB0aGVyZSBhcmUgMzY1LjI1IGRheXMgaW4gYSB5ZWFyLiBXZSBjYW4gY2FsY3VsYXRlIDMwLWRheXMgYW5kIDkwLWRheXMgZm9sbG93LXVwIHRpbWUgYmFzZWQgb24gdGhlIHRocmVlIHllYXJzIGZvbGxvdy11cC4gCgpgYGB7ciBDYWxjdWxhdGUgbmV3IEZVIGN1dC1vZmZzOiBtYXhpbXVtIEZVfQpjdXR0Lm9mZi4zMGRheXMgPSAoMS8zNjUuMjUpICogMzAKY3V0dC5vZmYuOTBkYXlzID0gKDEvMzY1LjI1KSAqIDkwCgojIEZpeCBtYXhpbXVtIEZVIG9mIDMwIGFuZCA5MCBkYXlzCkFFREIgPC0gQUVEQiAlPiUKICBtdXRhdGUoCiAgICBGVS5jdXR0Lm9mZi4zMGRheXMgPSBpZmVsc2UobWF4LmZvbGxvd3VwIDw9IGN1dHQub2ZmLjMwZGF5cywgbWF4LmZvbGxvd3VwLCBjdXR0Lm9mZi4zMGRheXMpLAogICAgRlUuY3V0dC5vZmYuOTBkYXlzID0gaWZlbHNlKG1heC5mb2xsb3d1cCA8PSBjdXR0Lm9mZi45MGRheXMsIG1heC5mb2xsb3d1cCwgY3V0dC5vZmYuOTBkYXlzKQogICkgCgpBRURCLnRlbXAgPC0gc3Vic2V0KEFFREIsICBzZWxlY3QgPSBjKCJTVFVEWV9OVU1CRVIiLCAiVVBJRCIsICJBZ2UiLCAiR2VuZGVyIiwgIkhvc3BpdGFsIiwgIkFydGVyeV9zdW1tYXJ5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heC5mb2xsb3d1cCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGVS5jdXR0Lm9mZi4zeWVhcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGVS5jdXR0Lm9mZi4zMGRheXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRlUuY3V0dC5vZmYuOTBkYXlzIikpCnJlcXVpcmUobGFiZWxsZWQpCkFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCkFFREIudGVtcCRIb3NwaXRhbCA8LSB0b19mYWN0b3IoQUVEQi50ZW1wJEhvc3BpdGFsKQpBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRBcnRlcnlfc3VtbWFyeSkKCkRUOjpkYXRhdGFibGUoQUVEQi50ZW1wWzE6MTAsXSwgY2FwdGlvbiA9ICJFeGNlcnB0IG9mIHRoZSB3aG9sZSBBRURCLiIsIHJvd25hbWVzID0gRkFMU0UpCgpybShBRURCLnRlbXApCgpBRURCLkNFQSA8LSBBRURCLkNFQSAlPiUKICBtdXRhdGUoCiAgICBGVS5jdXR0Lm9mZi4zMGRheXMgPSBpZmVsc2UobWF4LmZvbGxvd3VwIDw9IGN1dHQub2ZmLjMwZGF5cywgbWF4LmZvbGxvd3VwLCBjdXR0Lm9mZi4zMGRheXMpLAogICAgRlUuY3V0dC5vZmYuOTBkYXlzID0gaWZlbHNlKG1heC5mb2xsb3d1cCA8PSBjdXR0Lm9mZi45MGRheXMsIG1heC5mb2xsb3d1cCwgY3V0dC5vZmYuOTBkYXlzKQogICkgCgpBRURCLkNFQS50ZW1wIDwtIHN1YnNldChBRURCLkNFQSwgIHNlbGVjdCA9IGMoIlNUVURZX05VTUJFUiIsICJVUElEIiwgIkFnZSIsICJHZW5kZXIiLCAiSG9zcGl0YWwiLCAiQXJ0ZXJ5X3N1bW1hcnkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4LmZvbGxvd3VwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZVLmN1dHQub2ZmLjN5ZWFycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZVLmN1dHQub2ZmLjMwZGF5cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGVS5jdXR0Lm9mZi45MGRheXMiKSkKcmVxdWlyZShsYWJlbGxlZCkKQUVEQi5DRUEudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIuQ0VBLnRlbXAkR2VuZGVyKQpBRURCLkNFQS50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLkNFQS50ZW1wJEhvc3BpdGFsKQpBRURCLkNFQS50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLkNFQS50ZW1wJEFydGVyeV9zdW1tYXJ5KQoKRFQ6OmRhdGF0YWJsZShBRURCLkNFQS50ZW1wWzE6MTAsXSwgY2FwdGlvbiA9ICJFeGNlcnB0IG9mIHRoZSB3aG9sZSBBRURCLkNFQS4iLCByb3duYW1lcyA9IEZBTFNFKQoKcm0oQUVEQi5DRUEudGVtcCkKCgpgYGAKCkhlcmUgd2Ugd2lsbCBjYWxjdWxhdGUgdGhlIG5ldyAzMC0gYW5kIDkwLWRheXMgZm9sbG93LXVwIG9mIHRoZSBldmVudHMgYW5kIHRoZWlyIGV2ZW50LXRpbWVzIG9mIGludGVyZXN0OgoKLSBNQUNFIChgZXBtYWpvci4zeWVhcnNgKQotIFN0cm9rZSAoYGVwc3Ryb2tlLjN5ZWFyc2ApCi0gQ29yb25hcnkgZXZlbnRzIChgZXBjb3JvbmFyeS4zeWVhcnNgKQotIENhcmRpb3Zhc2N1bGFyIGRlYXRoIChgZXBjdmRlYXRoLjN5ZWFyc2ApCgoKYGBge3IgQ2FsY3VsYXRlIG5ldyBGVSBjdXQtb2ZmczogdGltZXN9CmF2Z19kYXlzX2luX3llYXIgPSAzNjUuMjUKY3V0dC5vZmYuMzBkYXlzLnNjYWxlZCA8LSBjdXR0Lm9mZi4zMGRheXMgKiAzNjUuMjUKY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCA8LSBjdXR0Lm9mZi45MGRheXMgKiAzNjUuMjUKIyBFdmVudCB0aW1lcwpBRURCIDwtIEFFREIgJT4lCiAgbXV0YXRlKAogICAgZXBfbWFqb3JfdF8zMGRheXMgPSBpZmVsc2UoZXBfbWFqb3JfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBfbWFqb3JfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX3N0cm9rZV90XzMwZGF5cyA9IGlmZWxzZShlcF9zdHJva2VfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX3N0cm9rZV90XzN5ZWFycyAqIGF2Z19kYXlzX2luX3llYXIsIGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQpLAogICAgZXBfY29yb25hcnlfdF8zMGRheXMgPSBpZmVsc2UoZXBfY29yb25hcnlfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBfY29yb25hcnlfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX2N2ZGVhdGhfdF8zMGRheXMgPSBpZmVsc2UoZXBfY3ZkZWF0aF90XzN5ZWFycyAqIGF2Z19kYXlzX2luX3llYXIgPD0gY3V0dC5vZmYuMzBkYXlzLnNjYWxlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX2N2ZGVhdGhfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX21ham9yX3RfOTBkYXlzID0gaWZlbHNlKGVwX21ham9yX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX21ham9yX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCksCiAgICBlcF9zdHJva2VfdF85MGRheXMgPSBpZmVsc2UoZXBfc3Ryb2tlX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcF9zdHJva2VfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi45MGRheXMuc2NhbGVkKSwKICAgIGVwX2Nvcm9uYXJ5X3RfOTBkYXlzID0gaWZlbHNlKGVwX2Nvcm9uYXJ5X3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX2Nvcm9uYXJ5X3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCksCiAgICBlcF9jdmRlYXRoX3RfOTBkYXlzID0gaWZlbHNlKGVwX2N2ZGVhdGhfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjkwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcF9jdmRlYXRoX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCkKICApIAoKQUVEQi5DRUEgPC0gQUVEQi5DRUEgJT4lCiAgbXV0YXRlKAogICAgZXBfbWFqb3JfdF8zMGRheXMgPSBpZmVsc2UoZXBfbWFqb3JfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBfbWFqb3JfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX3N0cm9rZV90XzMwZGF5cyA9IGlmZWxzZShlcF9zdHJva2VfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX3N0cm9rZV90XzN5ZWFycyAqIGF2Z19kYXlzX2luX3llYXIsIGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQpLAogICAgZXBfY29yb25hcnlfdF8zMGRheXMgPSBpZmVsc2UoZXBfY29yb25hcnlfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjMwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBfY29yb25hcnlfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX2N2ZGVhdGhfdF8zMGRheXMgPSBpZmVsc2UoZXBfY3ZkZWF0aF90XzN5ZWFycyAqIGF2Z19kYXlzX2luX3llYXIgPD0gY3V0dC5vZmYuMzBkYXlzLnNjYWxlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX2N2ZGVhdGhfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi4zMGRheXMuc2NhbGVkKSwKICAgIGVwX21ham9yX3RfOTBkYXlzID0gaWZlbHNlKGVwX21ham9yX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX21ham9yX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCksCiAgICBlcF9zdHJva2VfdF85MGRheXMgPSBpZmVsc2UoZXBfc3Ryb2tlX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcF9zdHJva2VfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyLCBjdXR0Lm9mZi45MGRheXMuc2NhbGVkKSwKICAgIGVwX2Nvcm9uYXJ5X3RfOTBkYXlzID0gaWZlbHNlKGVwX2Nvcm9uYXJ5X3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciA8PSBjdXR0Lm9mZi45MGRheXMuc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwX2Nvcm9uYXJ5X3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCksCiAgICBlcF9jdmRlYXRoX3RfOTBkYXlzID0gaWZlbHNlKGVwX2N2ZGVhdGhfdF8zeWVhcnMgKiBhdmdfZGF5c19pbl95ZWFyIDw9IGN1dHQub2ZmLjkwZGF5cy5zY2FsZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcF9jdmRlYXRoX3RfM3llYXJzICogYXZnX2RheXNfaW5feWVhciwgY3V0dC5vZmYuOTBkYXlzLnNjYWxlZCkKICApIAoKYGBgCgoKYGBge3IgQ294LXJlZ3Jlc3Npb25zOiBuZXcgdGltZXN9CgphdHRhY2goQUVEQikKQUVEQlssImVwbWFqb3IuMzBkYXlzIl0gPC0gQUVEQiRlcG1ham9yLjN5ZWFycwpBRURCJGVwbWFqb3IuMzBkYXlzW2VwbWFqb3IuM3llYXJzID09IDEgJiBlcF9tYWpvcl90XzN5ZWFycyA+IGN1dHQub2ZmLjMwZGF5c10gPC0gMAoKQUVEQlssImVwc3Ryb2tlLjMwZGF5cyJdIDwtIEFFREIkZXBzdHJva2UuM3llYXJzCkFFREIkZXBzdHJva2UuMzBkYXlzW2Vwc3Ryb2tlLjN5ZWFycyA9PSAxICYgZXBfc3Ryb2tlX3RfM3llYXJzID4gY3V0dC5vZmYuMzBkYXlzXSA8LSAwCgpBRURCWywiZXBjb3JvbmFyeS4zMGRheXMiXSA8LSBBRURCJGVwY29yb25hcnkuM3llYXJzCkFFREIkZXBjb3JvbmFyeS4zMGRheXNbZXBjb3JvbmFyeS4zeWVhcnMgPT0gMSAmIGVwX2Nvcm9uYXJ5X3RfM3llYXJzID4gY3V0dC5vZmYuMzBkYXlzXSA8LSAwCgpBRURCWywiZXBjdmRlYXRoLjMwZGF5cyJdIDwtIEFFREIkZXBjdmRlYXRoLjN5ZWFycwpBRURCJGVwY3ZkZWF0aC4zMGRheXNbZXBjdmRlYXRoLjN5ZWFycyA9PSAxICYgZXBfY3ZkZWF0aF90XzN5ZWFycyA+IGN1dHQub2ZmLjMwZGF5c10gPC0gMAoKQUVEQlssImVwbWFqb3IuOTBkYXlzIl0gPC0gQUVEQiRlcG1ham9yLjN5ZWFycwpBRURCJGVwbWFqb3IuOTBkYXlzW2VwbWFqb3IuM3llYXJzID09IDEgJiBlcF9tYWpvcl90XzN5ZWFycyA+IGN1dHQub2ZmLjkwZGF5c10gPC0gMAoKQUVEQlssImVwc3Ryb2tlLjkwZGF5cyJdIDwtIEFFREIkZXBzdHJva2UuM3llYXJzCkFFREIkZXBzdHJva2UuOTBkYXlzW2Vwc3Ryb2tlLjN5ZWFycyA9PSAxICYgZXBfc3Ryb2tlX3RfM3llYXJzID4gY3V0dC5vZmYuOTBkYXlzXSA8LSAwCgpBRURCWywiZXBjb3JvbmFyeS45MGRheXMiXSA8LSBBRURCJGVwY29yb25hcnkuM3llYXJzCkFFREIkZXBjb3JvbmFyeS45MGRheXNbZXBjb3JvbmFyeS4zeWVhcnMgPT0gMSAmIGVwX2Nvcm9uYXJ5X3RfM3llYXJzID4gY3V0dC5vZmYuOTBkYXlzXSA8LSAwCgpBRURCWywiZXBjdmRlYXRoLjkwZGF5cyJdIDwtIEFFREIkZXBjdmRlYXRoLjN5ZWFycwpBRURCJGVwY3ZkZWF0aC45MGRheXNbZXBjdmRlYXRoLjN5ZWFycyA9PSAxICYgZXBfY3ZkZWF0aF90XzN5ZWFycyA+IGN1dHQub2ZmLjkwZGF5c10gPC0gMAoKZGV0YWNoKEFFREIpCgpBRURCLnRlbXAgPC0gc3Vic2V0KEFFREIsICBzZWxlY3QgPSBjKCJTVFVEWV9OVU1CRVIiLCAiVVBJRCIsICJBZ2UiLCAiR2VuZGVyIiwgIkhvc3BpdGFsIiwgIkFydGVyeV9zdW1tYXJ5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwbWFqb3IuM3llYXJzIiwgImVwc3Ryb2tlLjN5ZWFycyIsICJlcGNvcm9uYXJ5LjN5ZWFycyIsICJlcGN2ZGVhdGguM3llYXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXBtYWpvci4zMGRheXMiLCAiZXBzdHJva2UuMzBkYXlzIiwgImVwY29yb25hcnkuMzBkYXlzIiwgImVwY3ZkZWF0aC4zMGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcG1ham9yLjkwZGF5cyIsICJlcHN0cm9rZS45MGRheXMiLCAiZXBjb3JvbmFyeS45MGRheXMiLCAiZXBjdmRlYXRoLjkwZGF5cyIpKQpyZXF1aXJlKGxhYmVsbGVkKQpBRURCLnRlbXAkR2VuZGVyIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkR2VuZGVyKQpBRURCLnRlbXAkSG9zcGl0YWwgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRIb3NwaXRhbCkKQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCgpEVDo6ZGF0YXRhYmxlKEFFREIudGVtcFsxOjEwLF0sIGNhcHRpb24gPSAiRXhjZXJwdCBvZiB0aGUgd2hvbGUgQUVEQi4iLCByb3duYW1lcyA9IEZBTFNFKQoKcm0oQUVEQi50ZW1wKQoKYXR0YWNoKEFFREIuQ0VBKQpBRURCLkNFQVssImVwbWFqb3IuMzBkYXlzIl0gPC0gQUVEQi5DRUEkZXBtYWpvci4zeWVhcnMKQUVEQi5DRUEkZXBtYWpvci4zMGRheXNbZXBtYWpvci4zeWVhcnMgPT0gMSAmIGVwX21ham9yX3RfM3llYXJzID4gY3V0dC5vZmYuMzBkYXlzXSA8LSAwCgpBRURCLkNFQVssImVwc3Ryb2tlLjMwZGF5cyJdIDwtIEFFREIuQ0VBJGVwc3Ryb2tlLjN5ZWFycwpBRURCLkNFQSRlcHN0cm9rZS4zMGRheXNbZXBzdHJva2UuM3llYXJzID09IDEgJiBlcF9zdHJva2VfdF8zeWVhcnMgPiBjdXR0Lm9mZi4zMGRheXNdIDwtIDAKCkFFREIuQ0VBWywiZXBjb3JvbmFyeS4zMGRheXMiXSA8LSBBRURCLkNFQSRlcGNvcm9uYXJ5LjN5ZWFycwpBRURCLkNFQSRlcGNvcm9uYXJ5LjMwZGF5c1tlcGNvcm9uYXJ5LjN5ZWFycyA9PSAxICYgZXBfY29yb25hcnlfdF8zeWVhcnMgPiBjdXR0Lm9mZi4zMGRheXNdIDwtIDAKCkFFREIuQ0VBWywiZXBjdmRlYXRoLjMwZGF5cyJdIDwtIEFFREIuQ0VBJGVwY3ZkZWF0aC4zeWVhcnMKQUVEQi5DRUEkZXBjdmRlYXRoLjMwZGF5c1tlcGN2ZGVhdGguM3llYXJzID09IDEgJiBlcF9jdmRlYXRoX3RfM3llYXJzID4gY3V0dC5vZmYuMzBkYXlzXSA8LSAwCgpBRURCLkNFQVssImVwbWFqb3IuOTBkYXlzIl0gPC0gQUVEQi5DRUEkZXBtYWpvci4zeWVhcnMKQUVEQi5DRUEkZXBtYWpvci45MGRheXNbZXBtYWpvci4zeWVhcnMgPT0gMSAmIGVwX21ham9yX3RfM3llYXJzID4gY3V0dC5vZmYuOTBkYXlzXSA8LSAwCgpBRURCLkNFQVssImVwc3Ryb2tlLjkwZGF5cyJdIDwtIEFFREIuQ0VBJGVwc3Ryb2tlLjN5ZWFycwpBRURCLkNFQSRlcHN0cm9rZS45MGRheXNbZXBzdHJva2UuM3llYXJzID09IDEgJiBlcF9zdHJva2VfdF8zeWVhcnMgPiBjdXR0Lm9mZi45MGRheXNdIDwtIDAKCkFFREIuQ0VBWywiZXBjb3JvbmFyeS45MGRheXMiXSA8LSBBRURCLkNFQSRlcGNvcm9uYXJ5LjN5ZWFycwpBRURCLkNFQSRlcGNvcm9uYXJ5LjkwZGF5c1tlcGNvcm9uYXJ5LjN5ZWFycyA9PSAxICYgZXBfY29yb25hcnlfdF8zeWVhcnMgPiBjdXR0Lm9mZi45MGRheXNdIDwtIDAKCkFFREIuQ0VBWywiZXBjdmRlYXRoLjkwZGF5cyJdIDwtIEFFREIuQ0VBJGVwY3ZkZWF0aC4zeWVhcnMKQUVEQi5DRUEkZXBjdmRlYXRoLjkwZGF5c1tlcGN2ZGVhdGguM3llYXJzID09IDEgJiBlcF9jdmRlYXRoX3RfM3llYXJzID4gY3V0dC5vZmYuOTBkYXlzXSA8LSAwCgpkZXRhY2goQUVEQi5DRUEpCgpBRURCLkNFQS50ZW1wIDwtIHN1YnNldChBRURCLkNFQSwgIHNlbGVjdCA9IGMoIlNUVURZX05VTUJFUiIsICJVUElEIiwgIkFnZSIsICJHZW5kZXIiLCAiSG9zcGl0YWwiLCAiQXJ0ZXJ5X3N1bW1hcnkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXBtYWpvci4zeWVhcnMiLCAiZXBzdHJva2UuM3llYXJzIiwgImVwY29yb25hcnkuM3llYXJzIiwgImVwY3ZkZWF0aC4zeWVhcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcG1ham9yLjMwZGF5cyIsICJlcHN0cm9rZS4zMGRheXMiLCAiZXBjb3JvbmFyeS4zMGRheXMiLCAiZXBjdmRlYXRoLjMwZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwbWFqb3IuOTBkYXlzIiwgImVwc3Ryb2tlLjkwZGF5cyIsICJlcGNvcm9uYXJ5LjkwZGF5cyIsICJlcGN2ZGVhdGguOTBkYXlzIikpCnJlcXVpcmUobGFiZWxsZWQpCkFFREIuQ0VBLnRlbXAkR2VuZGVyIDwtIHRvX2ZhY3RvcihBRURCLkNFQS50ZW1wJEdlbmRlcikKQUVEQi5DRUEudGVtcCRIb3NwaXRhbCA8LSB0b19mYWN0b3IoQUVEQi5DRUEudGVtcCRIb3NwaXRhbCkKQUVEQi5DRUEudGVtcCRBcnRlcnlfc3VtbWFyeSA8LSB0b19mYWN0b3IoQUVEQi5DRUEudGVtcCRBcnRlcnlfc3VtbWFyeSkKCkRUOjpkYXRhdGFibGUoQUVEQi5DRUEudGVtcFsxOjEwLF0sIGNhcHRpb24gPSAiRXhjZXJwdCBvZiB0aGUgd2hvbGUgQUVEQi5DRUEuIiwgcm93bmFtZXMgPSBGQUxTRSkKCnJtKEFFREIuQ0VBLnRlbXApCgoKCmBgYAoKIyMjIFNhbml0eSBjaGVja3MKCkZpcnN0IHdlIGRvIHNvbWUgc2FuaXR5IGNoZWNrcyBhbmQgaW52ZW50b3J5IHRoZSB0aW1lLXRvLWV2ZW50IGFuZCBldmVudCB2YXJpYWJsZXMuCmBgYHtyIENveC1yZWdyZXNzaW9uczogR2VuZXJhbH0KIyBSZWZlcmVuY2U6IGh0dHBzOi8vYmlvY29uZHVjdG9yLm9yZy9wYWNrYWdlcy9kZXZlbC9iaW9jL3ZpZ25ldHRlcy9NdWx0aUFzc2F5RXhwZXJpbWVudC9pbnN0L2RvYy9RdWlja1N0YXJ0TXVsdGlBc3NheS5odG1sCiMgSWYgeW91IHdhbnQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYW5kIG1lc3NhZ2VzIHdoZW4gaW5zdGFsbGluZy9sb2FkaW5nIHBhY2thZ2VzCiMgc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHt9KQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oInN1cnZpdmFsIikKaW5zdGFsbC5wYWNrYWdlcy5hdXRvKCJzdXJ2bWluZXIiKQppbnN0YWxsLnBhY2thZ2VzLmF1dG8oIkhtaXNjIikKCmNhdCgiKiBDcmVhdGluZyBmdW5jdGlvbiB0byBzdW1tYXJpemUgQ294IHJlZ3Jlc3Npb24gYW5kIHByZXBhcmUgY29udGFpbmVyIGZvciByZXN1bHRzLiIpCiMgRnVuY3Rpb24gdG8gZ2V0IHN1bW1hcnkgc3RhdGlzdGljcyBmcm9tIENveCByZWdyZXNzaW9uIG1vZGVsCkNPWC5TVEFUIDwtIGZ1bmN0aW9uKGNveGZpdCwgREFUQVNFVCwgT1VUQ09NRSwgcHJvdGVpbil7CiAgY2F0KCJTdW1tYXJpemluZyBDb3ggcmVncmVzc2lvbiByZXN1bHRzIGZvciAnIiwgcHJvdGVpbiAsIicgYW5kIGl0cyBhc3NvY2lhdGlvbiB0byAnIixPVVRDT01FLCInIGluICciLERBVEFTRVQsIicuXG4iKQogIGlmIChucm93KHN1bW1hcnkoY294Zml0KSRjb2VmZmljaWVudHMpID09IDEpIHsKICAgIG91dHB1dCA9IGMocHJvdGVpbiwgcmVwKE5BLDgpKQogICAgY2F0KCJNb2RlbCBub3QgZml0dGVkOyBwcm9iYWJseSBzaW5ndWxhci5cbiIpCiAgfWVsc2UgewogICAgY2F0KCJDb2xsZWN0aW5nIGRhdGEuXG5cbiIpCiAgICBjb3guc3VtIDwtIHN1bW1hcnkoY294Zml0KQogICAgY294LmVmZmVjdHNpemUgPSBjb3guc3VtJGNvZWZmaWNpZW50c1sxLDFdCiAgICBjb3guU0UgPSBjb3guc3VtJGNvZWZmaWNpZW50c1sxLDNdCiAgICBjb3guSFJlZmZlY3QgPSBjb3guc3VtJGNvZWZmaWNpZW50c1sxLDJdCiAgICBjb3guQ0lfbG93ID0gZXhwKGNveC5lZmZlY3RzaXplIC0gMS45NiAqIGNveC5TRSkKICAgIGNveC5DSV91cCA9IGV4cChjb3guZWZmZWN0c2l6ZSArIDEuOTYgKiBjb3guU0UpCiAgICBjb3guenZhbHVlID0gY294LnN1bSRjb2VmZmljaWVudHNbMSw0XQogICAgY294LnB2YWx1ZSA9IGNveC5zdW0kY29lZmZpY2llbnRzWzEsNV0KICAgIGNveC5zYW1wbGVfc2l6ZSA9IGNveC5zdW0kbgogICAgY294Lm5ldmVudHMgPSBjb3guc3VtJG5ldmVudAogICAgCiAgICBvdXRwdXQgPSBjKERBVEFTRVQsIE9VVENPTUUsIHByb3RlaW4sIGNveC5lZmZlY3RzaXplLCBjb3guU0UsIGNveC5IUmVmZmVjdCwgY294LkNJX2xvdywgY294LkNJX3VwLCBjb3guenZhbHVlLCBjb3gucHZhbHVlLCBjb3guc2FtcGxlX3NpemUsIGNveC5uZXZlbnRzKQogICAgY2F0KCJXZSBoYXZlIGNvbGxlY3RlZCB0aGUgZm9sbG93aW5nOlxuIikKICAgIGNhdCgiRGF0YXNldCB1c2VkLi4uLi4uLi4uLi4uLi46IiwgREFUQVNFVCwgIlxuIikKICAgIGNhdCgiT3V0Y29tZSBhbmFseXplZC4uLi4uLi4uLi46IiwgT1VUQ09NRSwgIlxuIikKICAgIGNhdCgiUHJvdGVpbi4uLi4uLi4uLi4uLi4uLi4uLi46IiwgcHJvdGVpbiwgIlxuIikKICAgIGNhdCgiRWZmZWN0IHNpemUuLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoY294LmVmZmVjdHNpemUsIDYpLCAiXG4iKQogICAgY2F0KCJTdGFuZGFyZCBlcnJvci4uLi4uLi4uLi4uLjoiLCByb3VuZChjb3guU0UsIDYpLCAiXG4iKQogICAgY2F0KCJPZGRzIHJhdGlvIChlZmZlY3Qgc2l6ZSkuLjoiLCByb3VuZChjb3guSFJlZmZlY3QsIDMpLCAiXG4iKQogICAgY2F0KCJMb3dlciA5NSUgQ0kuLi4uLi4uLi4uLi4uLjoiLCByb3VuZChjb3guQ0lfbG93LCAzKSwgIlxuIikKICAgIGNhdCgiVXBwZXIgOTUlIENJLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoY294LkNJX3VwLCAzKSwgIlxuIikKICAgIGNhdCgiVC12YWx1ZS4uLi4uLi4uLi4uLi4uLi4uLi46Iiwgcm91bmQoY294Lnp2YWx1ZSwgNiksICJcbiIpCiAgICBjYXQoIlAtdmFsdWUuLi4uLi4uLi4uLi4uLi4uLi4uOiIsIHNpZ25pZihjb3gucHZhbHVlLCA4KSwgIlxuIikKICAgIGNhdCgiU2FtcGxlIHNpemUgaW4gbW9kZWwuLi4uLi46IiwgY294LnNhbXBsZV9zaXplLCAiXG4iKQogICAgY2F0KCJOdW1iZXIgb2YgZXZlbnRzLi4uLi4uLi4uLjoiLCBjb3gubmV2ZW50cywgIlxuIikKICB9CiAgcmV0dXJuKG91dHB1dCkKICBwcmludChvdXRwdXQpCn0gCgp0aW1lcyA9IGMoImVwX21ham9yX3RfM3llYXJzIiwgCiAgICAgICAgICAiZXBfc3Ryb2tlX3RfM3llYXJzIiwgImVwX2Nvcm9uYXJ5X3RfM3llYXJzIiwgImVwX2N2ZGVhdGhfdF8zeWVhcnMiKQoKZW5kcG9pbnRzID0gYygiZXBtYWpvci4zeWVhcnMiLCAKICAgICAgICAgICAgICAiZXBzdHJva2UuM3llYXJzIiwgImVwY29yb25hcnkuM3llYXJzIiwgImVwY3ZkZWF0aC4zeWVhcnMiKQoKY2F0KCIqIENoZWNrIHRoZSBjYXNlcyBwZXIgZXZlbnQgdHlwZSAtIGZvciBzYW5pdHkuIikKZm9yIChldmVudHMgaW4gZW5kcG9pbnRzKXsKICByZXF1aXJlKGxhYmVsbGVkKQogIHByaW50KHBhc3RlMCgiUHJpbnRpbmcgdGhlIHN1bW1hcnkgb2Y6ICIsZXZlbnRzKSkKICAjIHByaW50KHN1bW1hcnkoQUVEQi5DRUFbLGV2ZW50c10pKQogIHByaW50KHRhYmxlKEFFREIuQ0VBWyxldmVudHNdKSkKfQoKY2F0KCIqIENoZWNrIGRpc3RyaWJ1dGlvbiBvZiBldmVudHMgb3ZlciB0aW1lIC0gZm9yIHNhbml0eS4iKQpmb3IgKGV2ZW50dGltZXMgaW4gdGltZXMpewogIHByaW50KHBhc3RlMCgiUHJpbnRpbmcgdGhlIHN1bW1hcnkgb2Y6ICIsZXZlbnR0aW1lcykpCiAgcHJpbnQoc3VtbWFyeShBRURCLkNFQVssZXZlbnR0aW1lc10pKQp9Cgpmb3IgKGV2ZW50dGltZSBpbiB0aW1lcyl7CiAgCiAgcHJpbnQocGFzdGUwKCJQcmludGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mOiAiLGV2ZW50dGltZSkpCiAgcCA8LSBnZ2hpc3RvZ3JhbShBRURCLkNFQSwgeCA9IGV2ZW50dGltZSwgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgIG1haW4gPSBldmVudHRpbWUsIGJpbnMgPSAxNSwgCiAgICAgICAgICAgICAgeGxhYiA9ICJ5ZWFyIiwgY29sb3IgPSB1aXRob2ZfY29sb3JbMTZdLCBmaWxsID0gdWl0aG9mX2NvbG9yWzE2XSwgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkgCiBwcmludChwKQogZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUUNfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5FdmVudERpc3RyaWJ1dGlvblBlclllYXIuIixldmVudHRpbWUsIi5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQp9Cgp0aW1lczMwID0gYygiZXBfbWFqb3JfdF8zMGRheXMiLCAKICAgICAgICAgICJlcF9zdHJva2VfdF8zMGRheXMiLCAiZXBfY29yb25hcnlfdF8zMGRheXMiLCAiZXBfY3ZkZWF0aF90XzMwZGF5cyIpCgplbmRwb2ludHMzMCA9IGMoImVwbWFqb3IuMzBkYXlzIiwgCiAgICAgICAgICAgICAgImVwc3Ryb2tlLjMwZGF5cyIsICJlcGNvcm9uYXJ5LjMwZGF5cyIsICJlcGN2ZGVhdGguMzBkYXlzIikKCmNhdCgiKiBDaGVjayB0aGUgY2FzZXMgcGVyIGV2ZW50IHR5cGUgLSBmb3Igc2FuaXR5LiIpCmZvciAoZXZlbnRzIGluIGVuZHBvaW50czMwKXsKICBwcmludChwYXN0ZTAoIlByaW50aW5nIHRoZSBzdW1tYXJ5IG9mOiAiLGV2ZW50cykpCiAgIyBwcmludChzdW1tYXJ5KEFFREIuQ0VBWyxldmVudHNdKSkKICBwcmludCh0YWJsZShBRURCLkNFQVssZXZlbnRzXSkpCn0KCmNhdCgiKiBDaGVjayBkaXN0cmlidXRpb24gb2YgZXZlbnRzIG92ZXIgdGltZSAtIGZvciBzYW5pdHkuIikKZm9yIChldmVudHRpbWVzIGluIHRpbWVzMzApewogIHByaW50KHBhc3RlMCgiUHJpbnRpbmcgdGhlIHN1bW1hcnkgb2Y6ICIsZXZlbnR0aW1lcykpCiAgcHJpbnQoc3VtbWFyeShBRURCLkNFQVssZXZlbnR0aW1lc10pKQp9Cgpmb3IgKGV2ZW50dGltZSBpbiB0aW1lczMwKXsKICAKICBwcmludChwYXN0ZTAoIlByaW50aW5nIHRoZSBkaXN0cmlidXRpb24gb2Y6ICIsZXZlbnR0aW1lKSkKICBwIDwtIGdnaGlzdG9ncmFtKEFFREIuQ0VBLCB4ID0gZXZlbnR0aW1lLCB5ID0gIi4uY291bnQuLiIsCiAgICAgICAgICAgICAgbWFpbiA9IGV2ZW50dGltZSwgYmlucyA9IDE1LCAKICAgICAgICAgICAgICB4bGFiID0gImRheXMiLCBjb2xvciA9IHVpdGhvZl9jb2xvclsxNl0sIGZpbGwgPSB1aXRob2ZfY29sb3JbMTZdLCBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKSAKIHByaW50KHApCiBnZ3NhdmUoZmlsZSA9IHBhc3RlMChRQ19sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkV2ZW50RGlzdHJpYnV0aW9uUGVyMzBEYXlzLiIsZXZlbnR0aW1lLCIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKfQoKdGltZXM5MCA9IGMoImVwX21ham9yX3RfOTBkYXlzIiwgCiAgICAgICAgICAiZXBfc3Ryb2tlX3RfOTBkYXlzIiwgImVwX2Nvcm9uYXJ5X3RfOTBkYXlzIiwgImVwX2N2ZGVhdGhfdF85MGRheXMiKQoKZW5kcG9pbnRzOTAgPSBjKCJlcG1ham9yLjkwZGF5cyIsIAogICAgICAgICAgICAgICJlcHN0cm9rZS45MGRheXMiLCAiZXBjb3JvbmFyeS45MGRheXMiLCAiZXBjdmRlYXRoLjkwZGF5cyIpCgpjYXQoIiogQ2hlY2sgdGhlIGNhc2VzIHBlciBldmVudCB0eXBlIC0gZm9yIHNhbml0eS4iKQpmb3IgKGV2ZW50cyBpbiBlbmRwb2ludHM5MCl7CiAgcHJpbnQocGFzdGUwKCJQcmludGluZyB0aGUgc3VtbWFyeSBvZjogIixldmVudHMpKQogICMgcHJpbnQoc3VtbWFyeShBRURCLkNFQVssZXZlbnRzXSkpCiAgcHJpbnQodGFibGUoQUVEQi5DRUFbLGV2ZW50c10pKQp9CgpjYXQoIiogQ2hlY2sgZGlzdHJpYnV0aW9uIG9mIGV2ZW50cyBvdmVyIHRpbWUgLSBmb3Igc2FuaXR5LiIpCmZvciAoZXZlbnR0aW1lcyBpbiB0aW1lczkwKXsKICBwcmludChwYXN0ZTAoIlByaW50aW5nIHRoZSBzdW1tYXJ5IG9mOiAiLGV2ZW50dGltZXMpKQogIHByaW50KHN1bW1hcnkoQUVEQi5DRUFbLGV2ZW50dGltZXNdKSkKfQoKZm9yIChldmVudHRpbWUgaW4gdGltZXM5MCl7CiAgCiAgcHJpbnQocGFzdGUwKCJQcmludGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mOiAiLGV2ZW50dGltZSkpCiAgcCA8LSBnZ2hpc3RvZ3JhbShBRURCLkNFQSwgeCA9IGV2ZW50dGltZSwgeSA9ICIuLmNvdW50Li4iLAogICAgICAgICAgICAgIG1haW4gPSBldmVudHRpbWUsIGJpbnMgPSAxNSwgCiAgICAgICAgICAgICAgeGxhYiA9ICJkYXlzIiwgY29sb3IgPSB1aXRob2ZfY29sb3JbMTZdLCBmaWxsID0gdWl0aG9mX2NvbG9yWzE2XSwgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkgCiBwcmludChwKQogZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUUNfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5FdmVudERpc3RyaWJ1dGlvblBlcjkwRGF5cy4iLGV2ZW50dGltZSwiLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCn0KCgpgYGAKCgojIyMgQ294IHJlZ3Jlc3Npb25zCgpMZXQncyBwZXJmb3JtIHRoZSBhY3R1YWwgQ294LXJlZ3Jlc3Npb25zLiBXZSB3aWxsIGFwcGx5IGEgY291cGxlIG9mIG1vZGVsczogCgotIE1vZGVsIDE6IGFkanVzdGVkIGZvciBhZ2UsIHNleCwgYW5kIHllYXIgb2Ygc3VyZ2VyeQotIE1vZGVsIDI6IGFkanVzdGVkIGZvciBhZ2UsIHNleCwgeWVhciBvZiBzdXJnZXJ5LCBoeXBlcnRlbnNpb24sIGRpYWJldGVzLCBzbW9raW5nLCBMREwtQyBsZXZlbHMsIGxpcGlkLWxvd2VyaW5nIGRydWdzLCBhbnRpcGxhdGVsZXQgZHJ1Z3MsIGVHRlIsIEJNSSwgaGlzdG9yeSBvZiBDVkQsIGxldmVsIG9mIHN0ZW5vc2lzCgojIyMjIDMgeWVhcnMgZm9sbG93LXVwCgoqTU9ERUwgMSoKYGBge3IgQ294LXJlZ3Jlc3Npb24gQW5hbHlzaXM6IFNpbXBsZSBtb2RlbH0KIyBTZXQgdXAgYSBkYXRhZnJhbWUgdG8gcmVjZWl2ZSByZXN1bHRzCkNPWC5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTIsIG5yb3cgPSAwKSkKCiMgTG9vcGluZyBvdmVyIGVhY2ggcHJvdGVpbi9lbmRwb2ludC90aW1lIGNvbWJpbmF0aW9uCmZvciAoaSBpbiAxOmxlbmd0aCh0aW1lcykpewogIGVwdGltZSA9IHRpbWVzW2ldCiAgZXAgPSBlbmRwb2ludHNbaV0KICBjYXQocGFzdGUwKCIqIEFuYWx5emluZyB0aGUgZWZmZWN0IG9mIHBsYXF1ZSBwcm90ZWlucyBvbiBbIixlcCwiXS5cbiIpKQogIGNhdCgiIC0gY3JlYXRpbmcgdGVtcG9yYXJ5IFNFIGZvciB0aGlzIHdvcmsuXG4iKQogIFRFTVAuREYgPSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBKQogIGNhdCgiIC0gbWFraW5nIGEgJ1N1cnYnIG9iamVjdCBhbmQgYWRkaW5nIHRoaXMgdG8gdGVtcG9yYXJ5IGRhdGFmcmFtZS5cbiIpCiAgVEVNUC5ERiRldmVudCA8LSBhcy5pbnRlZ2VyKFRFTVAuREZbLGVwXSkKICBURU1QLkRGJHkgPC0gU3Vydih0aW1lID0gVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQgPSBURU1QLkRGJGV2ZW50KQogIGNhdCgiIC0gbWFraW5nIHN0cmF0YSBvZiBlYWNoIG9mIHRoZSBwbGFxdWUgcHJvdGVpbnMgYW5kIHN0YXJ0IHN1cnZpdmFsIGFuYWx5c2lzLlxuIikKICAKICBmb3IgKHByb3RlaW4gaW4gMTpsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSykpewogICAgY2F0KHBhc3RlMCgiICAgPiBwcm9jZXNzaW5nIFsiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIl07ICIscHJvdGVpbiwiIG91dCBvZiAiLGxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LKSwiIHByb3RlaW5zLlxuIikpCiAgICAjIHNwbGl0dGluZyBpbnRvIHR3byBncm91cHMKICAgIFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dIDwtIGN1dDIoVEVNUC5ERlssVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXV0sIGcgPSAyKQogICAgY2F0KHBhc3RlMCgiICAgPiBjcm9zcyB0YWJ1bGF0aW9uIG9mICIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLXN0cmF0dW0uXG4iKSkKICAgIHNob3codGFibGUoVEVNUC5ERltbIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0gXV0pKQogICAgCiAgICBjYXQocGFzdGUwKCJcbiAgID4gZml0dGluZyB0aGUgbW9kZWwgZm9yICIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLXN0cmF0dW0uXG4iKSkKICAgIGZpdCA8LSBzdXJ2Zml0KGFzLmZvcm11bGEocGFzdGUwKCJ5IH4gIiwgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSkpLCBkYXRhID0gVEVNUC5ERikKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IG1ha2UgYSBLYXBsYW4tTWVpZXItc2hpenpsZS4uLlxuIikpCiAgICAjIG1ha2UgS2FwbGFuLU1laWVyIGN1cnZlIGFuZCBzYXZlIGl0CiAgICBzaG93KGdnc3VydnBsb3QoZml0LCBkYXRhID0gVEVNUC5ERiwKICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgIyBwYWxldGUgPSBjKCJGNTlEMTAiLCAiI0RCMDAzRiIsICIjNDlBMDFEIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgICBsaW5ldHlwZSA9IGMoMSwyKSwKICAgICAgICAgICAgICAgICAgICAjIGxpbmV0eXBlID0gYygxLDIsMyw0KSwKICAgICAgICAgICAgICAgICAgICAjIGNvbmYuaW50ID0gRkFMU0UsIGNvbmYuaW50LmZpbGwgPSAiIzU5NUE1QyIsIGNvbmYuaW50LmFscGhhID0gMC4xLAogICAgICAgICAgICAgICAgICAgIHB2YWwgPSBGQUxTRSwgcHZhbC5tZXRob2QgPSBGQUxTRSwgcHZhbC5zaXplID0gNCwKICAgICAgICAgICAgICAgICAgICByaXNrLnRhYmxlID0gVFJVRSwgcmlzay50YWJsZS55LnRleHQgPSBGQUxTRSwgdGFibGVzLnkudGV4dC5jb2wgPSBUUlVFLCBmb250c2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgY2Vuc29yID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kID0gInJpZ2h0IiwKICAgICAgICAgICAgICAgICAgICBsZWdlbmQudGl0bGUgPSBwYXN0ZTAoIiIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiIiksCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmxhYnMgPSBjKCJsb3ciLCAiaGlnaCIpLAogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcGFzdGUwKCJSaXNrIG9mICIsZXAsIiIpLCB4bGFiID0gIlRpbWUgW3llYXJzXSIsIGZvbnQubWFpbiA9IGMoMTYsICJib2xkIiwgImJsYWNrIikpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLnN1cnZpdmFsLiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLnBkZiIpLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCwgb25lZmlsZSA9IEZBTFNFKQoKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBwZXJmb3JtIHRoZSBDb3gtcmVncmVzc2lvbiBmYXNoaXp6bGUgYW5kIHBsb3QgaXQuLi5cbiIpKQogICAgIyMjIERvIENveC1yZWdyZXNzaW9uIGFuZCBwbG90IGl0CiAgICAKICAgICMjIyBNT0RFTCAxIChTaW1wbGUgbW9kZWwpCiAgICBjb3ggPSBjb3hwaChTdXJ2KFRFTVAuREZbLGVwdGltZV0sIGV2ZW50KSB+IFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dK0FnZStHZW5kZXIgKyBPUmRhdGVfeWVhciwgZGF0YSA9IFRFTVAuREYpCiAgICBjb3hwbG90ID0gY294cGgoU3VydihURU1QLkRGWyxlcHRpbWVdLCBldmVudCkgfiBzdHJhdGEoVEVNUC5ERltbIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0gXV0pK0FnZStHZW5kZXIgKyBPUmRhdGVfeWVhciwgZGF0YSA9IFRFTVAuREYpCgogICAgcGxvdChzdXJ2Zml0KGNveHBsb3QpLCBtYWluID0gcGFzdGUwKCJDb3ggcHJvcG9ydGlvbmFsIGhhemFyZCBvZiBbIixlcCwiXSBwZXIgWyIsZXB0aW1lLCJdLiIpLAogICAgICAgICAjIHlsaW0gPSBjKDAuMiwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiM1OTVBNUMiLCAiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgIHlsaW0gPSBjKDAsIDEpLCB4bGltID0gYygwLDMpLCBjb2wgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgbHR5ID0gYygxLDIpLCBsd2QgPSAyLAogICAgICAgICB5bGFiID0gIlN1dml2YWwgcHJvYmFiaWxpdHkiLCB4bGFiID0gIkZVIHRpbWUgW3llYXJzXSIsCiAgICAgICAgIG1hcmsudGltZSA9IEZBTFNFLCBheGVzID0gRkFMU0UsIGJ0eSA9ICJuIikKICAgIGxlZ2VuZCgidG9wcmlnaHQiLAogICAgICAgICAgIGMoImxvdyIsICJoaWdoIiksCiAgICAgICAgICAgdGl0bGUgPSBwYXN0ZTAoIiIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiIiksCiAgICAgICAgICAgY29sID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgbHR5ID0gYygxLDIpLCBsd2QgPSAyLAogICAgICAgICAgIGJ0eSA9ICJuIikKICAgIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKDAsIDMsIGJ5ID0gMSkpCiAgICBheGlzKHNpZGUgPSAyLCBhdCA9IHNlcSgwLCAxLCBieSA9IDAuMikpCiAgICBkZXYuY29weTJwZGYoZmlsZSA9IHBhc3RlMChDT1hfbG9jLCIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZGF5LCIuQUVEQi5DRUEuQ294LiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUb2RheSwiLkFFREIuQ0VBLkNveC4iLGVwLCIuNEcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi5NT0RFTDEucGRmIiksIGhlaWdodCA9IDEyLCB3aWR0aCA9IDEwLCBvbmVmaWxlID0gVFJVRSkKICAgIHNob3coc3VtbWFyeShjb3gpKQoKICAgIGNhdChwYXN0ZTAoIlxuICAgPiB3cml0aW5nIHRoZSBDb3gtcmVncmVzc2lvbiBmYXNoaXp6bGUgdG8gRXhjZWwuLi5cbiIpKQoKICAgIENPWC5yZXN1bHRzLlRFTVAgPC0gZGF0YS5mcmFtZShtYXRyaXgoTkEsIG5jb2wgPSAxMiwgbnJvdyA9IDApKQogICAgQ09YLnJlc3VsdHMuVEVNUFsxLF0gPSBDT1guU1RBVChjb3gsICJBRURCLkNFQSIsIGVwLCBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dKQogICAgQ09YLnJlc3VsdHMgPSByYmluZChDT1gucmVzdWx0cywgQ09YLnJlc3VsdHMuVEVNUCkKCiAgfQp9CgpjYXQoIi0gRWRpdCB0aGUgY29sdW1uIG5hbWVzLi4uXG4iKQpjb2xuYW1lcyhDT1gucmVzdWx0cykgPSBjKCJEYXRhc2V0IiwgIk91dGNvbWUiLCAiQ3BHIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmV0YSIsICJzLmUubS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJIUiIsICJsb3c5NUNJIiwgInVwOTVDSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlotdmFsdWUiLCAiUC12YWx1ZSIsICJTYW1wbGVTaXplIiwgIk5fZXZlbnRzIikKCmNhdCgiLSBDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKQ09YLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEJldGEpCkNPWC5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJHMuZS5tLikKQ09YLnJlc3VsdHMkSFIgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRIUikKQ09YLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGxvdzk1Q0kpCkNPWC5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJHVwOTVDSSkKQ09YLnJlc3VsdHMkYFotdmFsdWVgIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkYFotdmFsdWVgKQpDT1gucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgUC12YWx1ZWApCkNPWC5yZXN1bHRzJFNhbXBsZVNpemUgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRTYW1wbGVTaXplKQpDT1gucmVzdWx0cyROX2V2ZW50cyA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJE5fZXZlbnRzKQoKQUVEQi5DRUEuQ09YLnJlc3VsdHMgPC0gQ09YLnJlc3VsdHMKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIi0gV3JpdGluZyByZXN1bHRzIHRvIEV4Y2VsLWZpbGUuLi5cbiIpCmhlYWQuc3R5bGUgPC0gY3JlYXRlU3R5bGUodGV4dERlY29yYXRpb24gPSAiQk9MRCIpCndyaXRlLnhsc3goQUVEQi5DRUEuQ09YLnJlc3VsdHMsCiAgICAgICAgICAgZmlsZSA9IHBhc3RlMChPVVRfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5Db3guMkcuTU9ERUwxLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCiNybShURU1QLkRGLCBwcm90ZWluLCBmaXQsIGNveCwgY294cGxvdCwgQ09YLnJlc3VsdHMsIENPWC5yZXN1bHRzLlRFTVAsIGhlYWQuc3R5bGUsIEFFREIuQ0VBLkNPWC5yZXN1bHRzKQoKI3JtKGhlYWQuc3R5bGUpCgpgYGAKCipNT0RFTCAyKgpgYGB7ciBDb3gtcmVncmVzc2lvbiBBbmFseXNpczogTU9ERUwgMn0KIyBTZXQgdXAgYSBkYXRhZnJhbWUgdG8gcmVjZWl2ZSByZXN1bHRzCkNPWC5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTIsIG5yb3cgPSAwKSkKCiMgTG9vcGluZyBvdmVyIGVhY2ggcHJvdGVpbi9lbmRwb2ludC90aW1lIGNvbWJpbmF0aW9uCmZvciAoaSBpbiAxOmxlbmd0aCh0aW1lcykpewogIGVwdGltZSA9IHRpbWVzW2ldCiAgZXAgPSBlbmRwb2ludHNbaV0KICBjYXQocGFzdGUwKCIqIEFuYWx5emluZyB0aGUgZWZmZWN0IG9mIHBsYXF1ZSBwcm90ZWlucyBvbiBbIixlcCwiXS5cbiIpKQogIGNhdCgiIC0gY3JlYXRpbmcgdGVtcG9yYXJ5IFNFIGZvciB0aGlzIHdvcmsuXG4iKQogIFRFTVAuREYgPSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBKQogIGNhdCgiIC0gbWFraW5nIGEgJ1N1cnYnIG9iamVjdCBhbmQgYWRkaW5nIHRoaXMgdG8gdGVtcG9yYXJ5IGRhdGFmcmFtZS5cbiIpCiAgVEVNUC5ERiRldmVudCA8LSBhcy5pbnRlZ2VyKFRFTVAuREZbLGVwXSkKICAjYXMuaW50ZWdlcihURU1QLkRGWyxlcF0gPT0gIkV4Y2x1ZGVkIikKCiAgVEVNUC5ERiR5IDwtIFN1cnYodGltZSA9IFRFTVAuREZbLGVwdGltZV0sIGV2ZW50ID0gVEVNUC5ERiRldmVudCkKICBjYXQoIiAtIG1ha2luZyBzdHJhdGEgb2YgZWFjaCBvZiB0aGUgcGxhcXVlIHByb3RlaW5zIGFuZCBzdGFydCBzdXJ2aXZhbCBhbmFseXNpcy5cbiIpCiAgCiAgZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKXsKICAgIGNhdChwYXN0ZTAoIiAgID4gcHJvY2Vzc2luZyBbIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCJdOyAiLHByb3RlaW4sIiBvdXQgb2YgIixsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSyksIiBwcm90ZWlucy5cbiIpKQogICAgIyBzcGxpdHRpbmcgaW50byB0d28gZ3JvdXBzCiAgICBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSA8LSBjdXQyKFRFTVAuREZbLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl1dLCBnID0gMikKICAgIGNhdChwYXN0ZTAoIiAgID4gY3Jvc3MgdGFidWxhdGlvbiBvZiAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBzaG93KHRhYmxlKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKSkKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IGZpdHRpbmcgdGhlIG1vZGVsIGZvciAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBmaXQgPC0gc3VydmZpdChhcy5mb3JtdWxhKHBhc3RlMCgieSB+ICIsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pKSwgZGF0YSA9IFRFTVAuREYpCiAgICAKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBtYWtlIGEgS2FwbGFuLU1laWVyLXNoaXp6bGUuLi5cbiIpKQogICAgIyBtYWtlIEthcGxhbi1NZWllciBjdXJ2ZSBhbmQgc2F2ZSBpdAogICAgc2hvdyhnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IFRFTVAuREYsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgICMgcGFsZXRlID0gYygiRjU5RDEwIiwgIiNEQjAwM0YiLCAiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSBjKDEsMiksCiAgICAgICAgICAgICAgICAgICAgIyBsaW5ldHlwZSA9IGMoMSwyLDMsNCksCiAgICAgICAgICAgICAgICAgICAgIyBjb25mLmludCA9IEZBTFNFLCBjb25mLmludC5maWxsID0gIiM1OTVBNUMiLCBjb25mLmludC5hbHBoYSA9IDAuMSwKICAgICAgICAgICAgICAgICAgICBwdmFsID0gRkFMU0UsIHB2YWwubWV0aG9kID0gRkFMU0UsIHB2YWwuc2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUsIHJpc2sudGFibGUueS50ZXh0ID0gRkFMU0UsIHRhYmxlcy55LnRleHQuY29sID0gVFJVRSwgZm9udHNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgIGNlbnNvciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5sYWJzID0gYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiUmlzayBvZiAiLGVwLCIiKSwgeGxhYiA9ICJUaW1lIFt5ZWFyc10iLCBmb250Lm1haW4gPSBjKDE2LCAiYm9sZCIsICJibGFjayIpKSkKICAgIGRldi5jb3B5MnBkZihmaWxlID0gcGFzdGUwKENPWF9sb2MsIi8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9kYXksIi5BRURCLkNFQS5zdXJ2aXZhbC4iLGVwLCIuMkcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi5wZGYiKSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIG9uZWZpbGUgPSBGQUxTRSkKCiAgICBjYXQocGFzdGUwKCJcbiAgID4gcGVyZm9ybSB0aGUgQ294LXJlZ3Jlc3Npb24gZmFzaGl6emxlIGFuZCBwbG90IGl0Li4uXG4iKSkKICAgICMjIyBEbyBDb3gtcmVncmVzc2lvbiBhbmQgcGxvdCBpdAogICAgCiAgICAjIyMgTU9ERUwgMiBhZGp1c3RlZCBmb3IgYWdlLCBzZXgsIGh5cGVydGVuc2lvbiwgZGlhYmV0ZXMsIHNtb2tpbmcsIExETC1DIGxldmVscywgbGlwaWQtbG93ZXJpbmcgZHJ1Z3MsIGFudGlwbGF0ZWxldCBkcnVncywgZUdGUiwgQk1JLCBoaXN0b3J5IG9mIENWRCwgbGV2ZWwgb2Ygc3Rlbm9zaXMKICAgIGNveCA9IGNveHBoKFN1cnYoVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQpIH4gVEVNUC5ERltbIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0gXV0rQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKICAgIGNveHBsb3QgPSBjb3hwaChTdXJ2KFRFTVAuREZbLGVwdGltZV0sIGV2ZW50KSB+IHN0cmF0YShURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSkrQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKCiAgCiAgICBwbG90KHN1cnZmaXQoY294cGxvdCksIG1haW4gPSBwYXN0ZTAoIkNveCBwcm9wb3J0aW9uYWwgaGF6YXJkIG9mIFsiLGVwLCJdIHBlciBbIixlcHRpbWUsIl0uIiksCiAgICAgICAgICMgeWxpbSA9IGMoMC4yLCAxKSwgeGxpbSA9IGMoMCwzKSwgY29sID0gYygiIzU5NUE1QyIsICIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgeWxpbSA9IGMoMCwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICBsdHkgPSBjKDEsMiksIGx3ZCA9IDIsCiAgICAgICAgIHlsYWIgPSAiU3V2aXZhbCBwcm9iYWJpbGl0eSIsIHhsYWIgPSAiRlUgdGltZSBbeWVhcnNdIiwKICAgICAgICAgbWFyay50aW1lID0gRkFMU0UsIGF4ZXMgPSBGQUxTRSwgYnR5ID0gIm4iKQogICAgbGVnZW5kKCJ0b3ByaWdodCIsCiAgICAgICAgICAgYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCIiKSwKICAgICAgICAgICBjb2wgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICBsdHkgPSBjKDEsMiksIGx3ZCA9IDIsCiAgICAgICAgICAgYnR5ID0gIm4iKQogICAgYXhpcyhzaWRlID0gMSwgYXQgPSBzZXEoMCwgMywgYnkgPSAxKSkKICAgIGF4aXMoc2lkZSA9IDIsIGF0ID0gc2VxKDAsIDEsIGJ5ID0gMC4yKSkKICAgIGRldi5jb3B5MnBkZihmaWxlID0gcGFzdGUwKENPWF9sb2MsIi8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9kYXksIi5BRURCLkNFQS5Db3guIixlcCwiLjJHLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRvZGF5LCIuQUVEQi5DRUEuQ294LiIsZXAsIi40Ry4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLk1PREVMMi5wZGYiKSwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMTAsIG9uZWZpbGUgPSBUUlVFKQoKICAgIHNob3coc3VtbWFyeShjb3gpKQoKICAgIGNhdChwYXN0ZTAoIlxuICAgPiB3cml0aW5nIHRoZSBDb3gtcmVncmVzc2lvbiBmYXNoaXp6bGUgdG8gRXhjZWwuLi5cbiIpKQoKICAgIENPWC5yZXN1bHRzLlRFTVAgPC0gZGF0YS5mcmFtZShtYXRyaXgoTkEsIG5jb2wgPSAxMiwgbnJvdyA9IDApKQogICAgQ09YLnJlc3VsdHMuVEVNUFsxLF0gPSBDT1guU1RBVChjb3gsICJBRURCLkNFQSIsIGVwLCBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dKQogICAgQ09YLnJlc3VsdHMgPSByYmluZChDT1gucmVzdWx0cywgQ09YLnJlc3VsdHMuVEVNUCkKCiAgfQp9CgpjYXQoIi0gRWRpdCB0aGUgY29sdW1uIG5hbWVzLi4uXG4iKQpjb2xuYW1lcyhDT1gucmVzdWx0cykgPSBjKCJEYXRhc2V0IiwgIk91dGNvbWUiLCAiQ3BHIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmV0YSIsICJzLmUubS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJIUiIsICJsb3c5NUNJIiwgInVwOTVDSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlotdmFsdWUiLCAiUC12YWx1ZSIsICJTYW1wbGVTaXplIiwgIk5fZXZlbnRzIikKCmNhdCgiLSBDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKQ09YLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEJldGEpCkNPWC5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJHMuZS5tLikKQ09YLnJlc3VsdHMkSFIgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRIUikKQ09YLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGxvdzk1Q0kpCkNPWC5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJHVwOTVDSSkKQ09YLnJlc3VsdHMkYFotdmFsdWVgIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkYFotdmFsdWVgKQpDT1gucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgUC12YWx1ZWApCkNPWC5yZXN1bHRzJFNhbXBsZVNpemUgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRTYW1wbGVTaXplKQpDT1gucmVzdWx0cyROX2V2ZW50cyA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJE5fZXZlbnRzKQoKQUVEQi5DRUEuQ09YLnJlc3VsdHMgPC0gQ09YLnJlc3VsdHMKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIi0gV3JpdGluZyByZXN1bHRzIHRvIEV4Y2VsLWZpbGUuLi5cbiIpCmhlYWQuc3R5bGUgPC0gY3JlYXRlU3R5bGUodGV4dERlY29yYXRpb24gPSAiQk9MRCIpCndyaXRlLnhsc3goQUVEQi5DRUEuQ09YLnJlc3VsdHMsCiAgICAgICAgICAgZmlsZSA9IHBhc3RlMChPVVRfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5Db3guMkcuTU9ERUwyLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRFTVAuREYsIHByb3RlaW4sIGZpdCwgY294LCBjb3hwbG90LCBDT1gucmVzdWx0cywgQ09YLnJlc3VsdHMuVEVNUCwgaGVhZC5zdHlsZSwgQUVEQi5DRUEuQ09YLnJlc3VsdHMpCgpybShoZWFkLnN0eWxlKQoKYGBgCgoKIyMjIyAzMC1kYXlzIGZvbGxvdy11cAoKKk1PREVMIDEqCmBgYHtyIENveC1yZWdyZXNzaW9uIEFuYWx5c2lzOiBTaW1wbGUgbW9kZWwsIDMwIGRheXN9CiMgU2V0IHVwIGEgZGF0YWZyYW1lIHRvIHJlY2VpdmUgcmVzdWx0cwpDT1gucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCgojIExvb3Bpbmcgb3ZlciBlYWNoIHByb3RlaW4vZW5kcG9pbnQvdGltZSBjb21iaW5hdGlvbgpmb3IgKGkgaW4gMTpsZW5ndGgodGltZXMzMCkpewogIGVwdGltZSA9IHRpbWVzMzBbaV0KICBlcCA9IGVuZHBvaW50czMwW2ldCiAgY2F0KHBhc3RlMCgiKiBBbmFseXppbmcgdGhlIGVmZmVjdCBvZiBwbGFxdWUgcHJvdGVpbnMgb24gWyIsZXAsIl0uXG4iKSkKICBjYXQoIiAtIGNyZWF0aW5nIHRlbXBvcmFyeSBTRSBmb3IgdGhpcyB3b3JrLlxuIikKICBURU1QLkRGID0gYXMuZGF0YS5mcmFtZShBRURCLkNFQSkKICBjYXQoIiAtIG1ha2luZyBhICdTdXJ2JyBvYmplY3QgYW5kIGFkZGluZyB0aGlzIHRvIHRlbXBvcmFyeSBkYXRhZnJhbWUuXG4iKQogIFRFTVAuREYkZXZlbnQgPC0gYXMuaW50ZWdlcihURU1QLkRGWyxlcF0pCiAgVEVNUC5ERiR5IDwtIFN1cnYodGltZSA9IFRFTVAuREZbLGVwdGltZV0sIGV2ZW50ID0gVEVNUC5ERiRldmVudCkKICBjYXQoIiAtIG1ha2luZyBzdHJhdGEgb2YgZWFjaCBvZiB0aGUgcGxhcXVlIHByb3RlaW5zIGFuZCBzdGFydCBzdXJ2aXZhbCBhbmFseXNpcy5cbiIpCiAgCiAgZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKXsKICAgIGNhdChwYXN0ZTAoIiAgID4gcHJvY2Vzc2luZyBbIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCJdOyAiLHByb3RlaW4sIiBvdXQgb2YgIixsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSyksIiBwcm90ZWlucy5cbiIpKQogICAgIyBzcGxpdHRpbmcgaW50byB0d28gZ3JvdXBzCiAgICBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSA8LSBjdXQyKFRFTVAuREZbLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl1dLCBnID0gMikKICAgIGNhdChwYXN0ZTAoIiAgID4gY3Jvc3MgdGFidWxhdGlvbiBvZiAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBzaG93KHRhYmxlKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKSkKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IGZpdHRpbmcgdGhlIG1vZGVsIGZvciAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBmaXQgPC0gc3VydmZpdChhcy5mb3JtdWxhKHBhc3RlMCgieSB+ICIsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pKSwgZGF0YSA9IFRFTVAuREYpCiAgICAKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBtYWtlIGEgS2FwbGFuLU1laWVyLXNoaXp6bGUuLi5cbiIpKQogICAgIyBtYWtlIEthcGxhbi1NZWllciBjdXJ2ZSBhbmQgc2F2ZSBpdAogICAgc2hvdyhnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IFRFTVAuREYsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgICMgcGFsZXRlID0gYygiRjU5RDEwIiwgIiNEQjAwM0YiLCAiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSBjKDEsMiksCiAgICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksCiAgICAgICAgICAgICAgICAgICAgIyBsaW5ldHlwZSA9IGMoMSwyLDMsNCksCiAgICAgICAgICAgICAgICAgICAgIyBjb25mLmludCA9IEZBTFNFLCBjb25mLmludC5maWxsID0gIiM1OTVBNUMiLCBjb25mLmludC5hbHBoYSA9IDAuMSwKICAgICAgICAgICAgICAgICAgICBwdmFsID0gRkFMU0UsIHB2YWwubWV0aG9kID0gRkFMU0UsIHB2YWwuc2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUsIHJpc2sudGFibGUueS50ZXh0ID0gRkFMU0UsIHRhYmxlcy55LnRleHQuY29sID0gVFJVRSwgZm9udHNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgIGNlbnNvciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5sYWJzID0gYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiUmlzayBvZiAiLGVwLCIiKSwgeGxhYiA9ICJUaW1lIFtkYXlzXSIsIGZvbnQubWFpbiA9IGMoMTYsICJib2xkIiwgImJsYWNrIikpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLnN1cnZpdmFsLiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLjMwZGF5cy5wZGYiKSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIG9uZWZpbGUgPSBGQUxTRSkKCiAgICBjYXQocGFzdGUwKCJcbiAgID4gcGVyZm9ybSB0aGUgQ294LXJlZ3Jlc3Npb24gZmFzaGl6emxlIGFuZCBwbG90IGl0Li4uXG4iKSkKICAgICMjIyBEbyBDb3gtcmVncmVzc2lvbiBhbmQgcGxvdCBpdAogICAgCiAgICAjIyMgTU9ERUwgMSAoU2ltcGxlIG1vZGVsKQogICAgY294ID0gY294cGgoU3VydihURU1QLkRGWyxlcHRpbWVdLCBldmVudCkgfiBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXStBZ2UrR2VuZGVyICsgT1JkYXRlX3llYXIsIGRhdGEgPSBURU1QLkRGKQogICAgY294cGxvdCA9IGNveHBoKFN1cnYoVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQpIH4gc3RyYXRhKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKStBZ2UrR2VuZGVyICsgT1JkYXRlX3llYXIsIGRhdGEgPSBURU1QLkRGKQoKICAgIHBsb3Qoc3VydmZpdChjb3hwbG90KSwgbWFpbiA9IHBhc3RlMCgiQ294IHByb3BvcnRpb25hbCBoYXphcmQgb2YgWyIsZXAsIl0gcGVyIFsiLGVwdGltZSwiXS4iKSwKICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiM1OTVBNUMiLCAiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICMgeWxpbSA9IGMoMCwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICBsdHkgPSBjKDEsMiksIGx3ZCA9IDIsCiAgICAgICAgIHlsYWIgPSAiU3V2aXZhbCBwcm9iYWJpbGl0eSIsIHhsYWIgPSAiRlUgdGltZSBbZGF5c10iLAogICAgICAgICBtYXJrLnRpbWUgPSBGQUxTRSwgYXhlcyA9IEZBTFNFLCBidHkgPSAibiIpCiAgICBsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgICAgICBjKCJsb3ciLCAiaGlnaCIpLAogICAgICAgICAgIHRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgIGNvbCA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgIGx0eSA9IGMoMSwyKSwgbHdkID0gMiwKICAgICAgICAgICBidHkgPSAibiIpCiAgICBheGlzKHNpZGUgPSAxLCBhdCA9IHNlcSgwLCAzLCBieSA9IDEpKQogICAgYXhpcyhzaWRlID0gMiwgYXQgPSBzZXEoMCwgMSwgYnkgPSAwLjIpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLkNveC4iLGVwLCIuMkcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVG9kYXksIi5BRURCLkNFQS5Db3guIixlcCwiLjRHLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCIuTU9ERUwxLjMwZGF5cy5wZGYiKSwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMTAsIG9uZWZpbGUgPSBUUlVFKQogICAgc2hvdyhzdW1tYXJ5KGNveCkpCgogICAgY2F0KHBhc3RlMCgiXG4gICA+IHdyaXRpbmcgdGhlIENveC1yZWdyZXNzaW9uIGZhc2hpenpsZSB0byBFeGNlbC4uLlxuIikpCgogICAgQ09YLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCiAgICBDT1gucmVzdWx0cy5URU1QWzEsXSA9IENPWC5TVEFUKGNveCwgIkFFREIuQ0VBIiwgZXAsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pCiAgICBDT1gucmVzdWx0cyA9IHJiaW5kKENPWC5yZXN1bHRzLCBDT1gucmVzdWx0cy5URU1QKQoKICB9Cn0KCmNhdCgiLSBFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKENPWC5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiT3V0Y29tZSIsICJDcEciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkhSIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiWi12YWx1ZSIsICJQLXZhbHVlIiwgIlNhbXBsZVNpemUiLCAiTl9ldmVudHMiKQoKY2F0KCItIENvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpDT1gucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkQmV0YSkKQ09YLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkcy5lLm0uKQpDT1gucmVzdWx0cyRIUiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEhSKQpDT1gucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkbG93OTVDSSkKQ09YLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkdXA5NUNJKQpDT1gucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgWi12YWx1ZWApCkNPWC5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGBQLXZhbHVlYCkKQ09YLnJlc3VsdHMkU2FtcGxlU2l6ZSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJFNhbXBsZVNpemUpCkNPWC5yZXN1bHRzJE5fZXZlbnRzIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkTl9ldmVudHMpCgpBRURCLkNFQS5DT1gucmVzdWx0cyA8LSBDT1gucmVzdWx0cwoKIyBTYXZlIHRoZSBkYXRhCmxpYnJhcnkob3Blbnhsc3gpCmNhdCgiLSBXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKaGVhZC5zdHlsZSA8LSBjcmVhdGVTdHlsZSh0ZXh0RGVjb3JhdGlvbiA9ICJCT0xEIikKd3JpdGUueGxzeChBRURCLkNFQS5DT1gucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkNveC4yRy5NT0RFTDEuMzBkYXlzLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCiNybShURU1QLkRGLCBwcm90ZWluLCBmaXQsIGNveCwgY294cGxvdCwgQ09YLnJlc3VsdHMsIENPWC5yZXN1bHRzLlRFTVAsIGhlYWQuc3R5bGUsIEFFREIuQ0VBLkNPWC5yZXN1bHRzKQoKI3JtKGhlYWQuc3R5bGUpCgpgYGAKCipNT0RFTCAyKgpgYGB7ciBDb3gtcmVncmVzc2lvbiBBbmFseXNpczogTU9ERUwgMiwgMzAgZGF5c30KIyBTZXQgdXAgYSBkYXRhZnJhbWUgdG8gcmVjZWl2ZSByZXN1bHRzCkNPWC5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTIsIG5yb3cgPSAwKSkKCiMgTG9vcGluZyBvdmVyIGVhY2ggcHJvdGVpbi9lbmRwb2ludC90aW1lIGNvbWJpbmF0aW9uCmZvciAoaSBpbiAxOmxlbmd0aCh0aW1lczMwKSl7CiAgZXB0aW1lID0gdGltZXMzMFtpXQogIGVwID0gZW5kcG9pbnRzMzBbaV0KICBjYXQocGFzdGUwKCIqIEFuYWx5emluZyB0aGUgZWZmZWN0IG9mIHBsYXF1ZSBwcm90ZWlucyBvbiBbIixlcCwiXS5cbiIpKQogIGNhdCgiIC0gY3JlYXRpbmcgdGVtcG9yYXJ5IFNFIGZvciB0aGlzIHdvcmsuXG4iKQogIFRFTVAuREYgPSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBKQogIGNhdCgiIC0gbWFraW5nIGEgJ1N1cnYnIG9iamVjdCBhbmQgYWRkaW5nIHRoaXMgdG8gdGVtcG9yYXJ5IGRhdGFmcmFtZS5cbiIpCiAgVEVNUC5ERiRldmVudCA8LSBhcy5pbnRlZ2VyKFRFTVAuREZbLGVwXSkKICAjYXMuaW50ZWdlcihURU1QLkRGWyxlcF0gPT0gIkV4Y2x1ZGVkIikKCiAgVEVNUC5ERiR5IDwtIFN1cnYodGltZSA9IFRFTVAuREZbLGVwdGltZV0sIGV2ZW50ID0gVEVNUC5ERiRldmVudCkKICBjYXQoIiAtIG1ha2luZyBzdHJhdGEgb2YgZWFjaCBvZiB0aGUgcGxhcXVlIHByb3RlaW5zIGFuZCBzdGFydCBzdXJ2aXZhbCBhbmFseXNpcy5cbiIpCiAgCiAgZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKXsKICAgIGNhdChwYXN0ZTAoIiAgID4gcHJvY2Vzc2luZyBbIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCJdOyAiLHByb3RlaW4sIiBvdXQgb2YgIixsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSyksIiBwcm90ZWlucy5cbiIpKQogICAgIyBzcGxpdHRpbmcgaW50byB0d28gZ3JvdXBzCiAgICBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSA8LSBjdXQyKFRFTVAuREZbLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl1dLCBnID0gMikKICAgIGNhdChwYXN0ZTAoIiAgID4gY3Jvc3MgdGFidWxhdGlvbiBvZiAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBzaG93KHRhYmxlKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKSkKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IGZpdHRpbmcgdGhlIG1vZGVsIGZvciAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBmaXQgPC0gc3VydmZpdChhcy5mb3JtdWxhKHBhc3RlMCgieSB+ICIsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pKSwgZGF0YSA9IFRFTVAuREYpCiAgICAKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBtYWtlIGEgS2FwbGFuLU1laWVyLXNoaXp6bGUuLi5cbiIpKQogICAgIyBtYWtlIEthcGxhbi1NZWllciBjdXJ2ZSBhbmQgc2F2ZSBpdAogICAgc2hvdyhnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IFRFTVAuREYsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgICMgcGFsZXRlID0gYygiRjU5RDEwIiwgIiNEQjAwM0YiLCAiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSBjKDEsMiksCiAgICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksCiAgICAgICAgICAgICAgICAgICAgIyBsaW5ldHlwZSA9IGMoMSwyLDMsNCksCiAgICAgICAgICAgICAgICAgICAgIyBjb25mLmludCA9IEZBTFNFLCBjb25mLmludC5maWxsID0gIiM1OTVBNUMiLCBjb25mLmludC5hbHBoYSA9IDAuMSwKICAgICAgICAgICAgICAgICAgICBwdmFsID0gRkFMU0UsIHB2YWwubWV0aG9kID0gRkFMU0UsIHB2YWwuc2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUsIHJpc2sudGFibGUueS50ZXh0ID0gRkFMU0UsIHRhYmxlcy55LnRleHQuY29sID0gVFJVRSwgZm9udHNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgIGNlbnNvciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5sYWJzID0gYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiUmlzayBvZiAiLGVwLCIiKSwgeGxhYiA9ICJUaW1lIFtkYXlzXSIsIGZvbnQubWFpbiA9IGMoMTYsICJib2xkIiwgImJsYWNrIikpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLnN1cnZpdmFsLiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLjMwZGF5cy5wZGYiKSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIG9uZWZpbGUgPSBGQUxTRSkKCiAgICBjYXQocGFzdGUwKCJcbiAgID4gcGVyZm9ybSB0aGUgQ294LXJlZ3Jlc3Npb24gZmFzaGl6emxlIGFuZCBwbG90IGl0Li4uXG4iKSkKICAgICMjIyBEbyBDb3gtcmVncmVzc2lvbiBhbmQgcGxvdCBpdAogICAgCiAgICAjIyMgTU9ERUwgMiBhZGp1c3RlZCBmb3IgYWdlLCBzZXgsIGh5cGVydGVuc2lvbiwgZGlhYmV0ZXMsIHNtb2tpbmcsIExETC1DIGxldmVscywgbGlwaWQtbG93ZXJpbmcgZHJ1Z3MsIGFudGlwbGF0ZWxldCBkcnVncywgZUdGUiwgQk1JLCBoaXN0b3J5IG9mIENWRCwgbGV2ZWwgb2Ygc3Rlbm9zaXMKICAgIGNveCA9IGNveHBoKFN1cnYoVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQpIH4gVEVNUC5ERltbIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0gXV0rQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKICAgIGNveHBsb3QgPSBjb3hwaChTdXJ2KFRFTVAuREZbLGVwdGltZV0sIGV2ZW50KSB+IHN0cmF0YShURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSkrQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKCiAgCiAgICBwbG90KHN1cnZmaXQoY294cGxvdCksIG1haW4gPSBwYXN0ZTAoIkNveCBwcm9wb3J0aW9uYWwgaGF6YXJkIG9mIFsiLGVwLCJdIHBlciBbIixlcHRpbWUsIl0uIiksCiAgICAgICAgIHlsaW0gPSBjKDAuNzUsIDEpLCB4bGltID0gYygwLDMpLCBjb2wgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgIyB5bGltID0gYygwLCAxKSwgeGxpbSA9IGMoMCwzKSwgY29sID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgIGx0eSA9IGMoMSwyKSwgbHdkID0gMiwKICAgICAgICAgeWxhYiA9ICJTdXZpdmFsIHByb2JhYmlsaXR5IiwgeGxhYiA9ICJGVSB0aW1lIFtkYXlzXSIsCiAgICAgICAgIG1hcmsudGltZSA9IEZBTFNFLCBheGVzID0gRkFMU0UsIGJ0eSA9ICJuIikKICAgIGxlZ2VuZCgidG9wcmlnaHQiLAogICAgICAgICAgIGMoImxvdyIsICJoaWdoIiksCiAgICAgICAgICAgdGl0bGUgPSBwYXN0ZTAoIiIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiIiksCiAgICAgICAgICAgY29sID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgbHR5ID0gYygxLDIpLCBsd2QgPSAyLAogICAgICAgICAgIGJ0eSA9ICJuIikKICAgIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKDAsIDMsIGJ5ID0gMSkpCiAgICBheGlzKHNpZGUgPSAyLCBhdCA9IHNlcSgwLCAxLCBieSA9IDAuMikpCiAgICBkZXYuY29weTJwZGYoZmlsZSA9IHBhc3RlMChDT1hfbG9jLCIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZGF5LCIuQUVEQi5DRUEuQ294LiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUb2RheSwiLkFFREIuQ0VBLkNveC4iLGVwLCIuNEcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi5NT0RFTDIuMzBkYXlzLnBkZiIpLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAxMCwgb25lZmlsZSA9IFRSVUUpCgogICAgc2hvdyhzdW1tYXJ5KGNveCkpCgogICAgY2F0KHBhc3RlMCgiXG4gICA+IHdyaXRpbmcgdGhlIENveC1yZWdyZXNzaW9uIGZhc2hpenpsZSB0byBFeGNlbC4uLlxuIikpCgogICAgQ09YLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCiAgICBDT1gucmVzdWx0cy5URU1QWzEsXSA9IENPWC5TVEFUKGNveCwgIkFFREIuQ0VBIiwgZXAsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pCiAgICBDT1gucmVzdWx0cyA9IHJiaW5kKENPWC5yZXN1bHRzLCBDT1gucmVzdWx0cy5URU1QKQoKICB9Cn0KCmNhdCgiLSBFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKENPWC5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiT3V0Y29tZSIsICJDcEciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkhSIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiWi12YWx1ZSIsICJQLXZhbHVlIiwgIlNhbXBsZVNpemUiLCAiTl9ldmVudHMiKQoKY2F0KCItIENvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpDT1gucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkQmV0YSkKQ09YLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkcy5lLm0uKQpDT1gucmVzdWx0cyRIUiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEhSKQpDT1gucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkbG93OTVDSSkKQ09YLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkdXA5NUNJKQpDT1gucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgWi12YWx1ZWApCkNPWC5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGBQLXZhbHVlYCkKQ09YLnJlc3VsdHMkU2FtcGxlU2l6ZSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJFNhbXBsZVNpemUpCkNPWC5yZXN1bHRzJE5fZXZlbnRzIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkTl9ldmVudHMpCgpBRURCLkNFQS5DT1gucmVzdWx0cyA8LSBDT1gucmVzdWx0cwoKIyBTYXZlIHRoZSBkYXRhCmNhdCgiLSBXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKaGVhZC5zdHlsZSA8LSBjcmVhdGVTdHlsZSh0ZXh0RGVjb3JhdGlvbiA9ICJCT0xEIikKd3JpdGUueGxzeChBRURCLkNFQS5DT1gucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkNveC4yRy5NT0RFTDIuMzBkYXlzLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRFTVAuREYsIHByb3RlaW4sIGZpdCwgY294LCBjb3hwbG90LCBDT1gucmVzdWx0cywgQ09YLnJlc3VsdHMuVEVNUCwgaGVhZC5zdHlsZSwgQUVEQi5DRUEuQ09YLnJlc3VsdHMpCgpybShoZWFkLnN0eWxlKQoKYGBgCgoKIyMjIyA5MC1kYXlzIGZvbGxvdy11cAoKKk1PREVMIDEqCmBgYHtyIENveC1yZWdyZXNzaW9uIEFuYWx5c2lzOiBTaW1wbGUgbW9kZWwsIDkwIGRheXN9CiMgU2V0IHVwIGEgZGF0YWZyYW1lIHRvIHJlY2VpdmUgcmVzdWx0cwpDT1gucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCgojIExvb3Bpbmcgb3ZlciBlYWNoIHByb3RlaW4vZW5kcG9pbnQvdGltZSBjb21iaW5hdGlvbgpmb3IgKGkgaW4gMTpsZW5ndGgodGltZXM5MCkpewogIGVwdGltZSA9IHRpbWVzOTBbaV0KICBlcCA9IGVuZHBvaW50czkwW2ldCiAgY2F0KHBhc3RlMCgiKiBBbmFseXppbmcgdGhlIGVmZmVjdCBvZiBwbGFxdWUgcHJvdGVpbnMgb24gWyIsZXAsIl0uXG4iKSkKICBjYXQoIiAtIGNyZWF0aW5nIHRlbXBvcmFyeSBTRSBmb3IgdGhpcyB3b3JrLlxuIikKICBURU1QLkRGID0gYXMuZGF0YS5mcmFtZShBRURCLkNFQSkKICBjYXQoIiAtIG1ha2luZyBhICdTdXJ2JyBvYmplY3QgYW5kIGFkZGluZyB0aGlzIHRvIHRlbXBvcmFyeSBkYXRhZnJhbWUuXG4iKQogIFRFTVAuREYkZXZlbnQgPC0gYXMuaW50ZWdlcihURU1QLkRGWyxlcF0pCiAgVEVNUC5ERiR5IDwtIFN1cnYodGltZSA9IFRFTVAuREZbLGVwdGltZV0sIGV2ZW50ID0gVEVNUC5ERiRldmVudCkKICBjYXQoIiAtIG1ha2luZyBzdHJhdGEgb2YgZWFjaCBvZiB0aGUgcGxhcXVlIHByb3RlaW5zIGFuZCBzdGFydCBzdXJ2aXZhbCBhbmFseXNpcy5cbiIpCiAgCiAgZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKXsKICAgIGNhdChwYXN0ZTAoIiAgID4gcHJvY2Vzc2luZyBbIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCJdOyAiLHByb3RlaW4sIiBvdXQgb2YgIixsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSyksIiBwcm90ZWlucy5cbiIpKQogICAgIyBzcGxpdHRpbmcgaW50byB0d28gZ3JvdXBzCiAgICBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSA8LSBjdXQyKFRFTVAuREZbLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl1dLCBnID0gMikKICAgIGNhdChwYXN0ZTAoIiAgID4gY3Jvc3MgdGFidWxhdGlvbiBvZiAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBzaG93KHRhYmxlKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKSkKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IGZpdHRpbmcgdGhlIG1vZGVsIGZvciAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBmaXQgPC0gc3VydmZpdChhcy5mb3JtdWxhKHBhc3RlMCgieSB+ICIsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pKSwgZGF0YSA9IFRFTVAuREYpCiAgICAKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBtYWtlIGEgS2FwbGFuLU1laWVyLXNoaXp6bGUuLi5cbiIpKQogICAgIyBtYWtlIEthcGxhbi1NZWllciBjdXJ2ZSBhbmQgc2F2ZSBpdAogICAgc2hvdyhnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IFRFTVAuREYsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgICMgcGFsZXRlID0gYygiRjU5RDEwIiwgIiNEQjAwM0YiLCAiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSBjKDEsMiksCiAgICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksCiAgICAgICAgICAgICAgICAgICAgIyBsaW5ldHlwZSA9IGMoMSwyLDMsNCksCiAgICAgICAgICAgICAgICAgICAgIyBjb25mLmludCA9IEZBTFNFLCBjb25mLmludC5maWxsID0gIiM1OTVBNUMiLCBjb25mLmludC5hbHBoYSA9IDAuMSwKICAgICAgICAgICAgICAgICAgICBwdmFsID0gRkFMU0UsIHB2YWwubWV0aG9kID0gRkFMU0UsIHB2YWwuc2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUsIHJpc2sudGFibGUueS50ZXh0ID0gRkFMU0UsIHRhYmxlcy55LnRleHQuY29sID0gVFJVRSwgZm9udHNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgIGNlbnNvciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5sYWJzID0gYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiUmlzayBvZiAiLGVwLCIiKSwgeGxhYiA9ICJUaW1lIFtkYXlzXSIsIGZvbnQubWFpbiA9IGMoMTYsICJib2xkIiwgImJsYWNrIikpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLnN1cnZpdmFsLiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLjkwZGF5cy5wZGYiKSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIG9uZWZpbGUgPSBGQUxTRSkKCiAgICBjYXQocGFzdGUwKCJcbiAgID4gcGVyZm9ybSB0aGUgQ294LXJlZ3Jlc3Npb24gZmFzaGl6emxlIGFuZCBwbG90IGl0Li4uXG4iKSkKICAgICMjIyBEbyBDb3gtcmVncmVzc2lvbiBhbmQgcGxvdCBpdAogICAgCiAgICAjIyMgTU9ERUwgMSAoU2ltcGxlIG1vZGVsKQogICAgY294ID0gY294cGgoU3VydihURU1QLkRGWyxlcHRpbWVdLCBldmVudCkgfiBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXStBZ2UrR2VuZGVyICsgT1JkYXRlX3llYXIsIGRhdGEgPSBURU1QLkRGKQogICAgY294cGxvdCA9IGNveHBoKFN1cnYoVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQpIH4gc3RyYXRhKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKStBZ2UrR2VuZGVyICsgT1JkYXRlX3llYXIsIGRhdGEgPSBURU1QLkRGKQoKICAgIHBsb3Qoc3VydmZpdChjb3hwbG90KSwgbWFpbiA9IHBhc3RlMCgiQ294IHByb3BvcnRpb25hbCBoYXphcmQgb2YgWyIsZXAsIl0gcGVyIFsiLGVwdGltZSwiXS4iKSwKICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiM1OTVBNUMiLCAiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICMgeWxpbSA9IGMoMCwgMSksIHhsaW0gPSBjKDAsMyksIGNvbCA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICBsdHkgPSBjKDEsMiksIGx3ZCA9IDIsCiAgICAgICAgIHlsYWIgPSAiU3V2aXZhbCBwcm9iYWJpbGl0eSIsIHhsYWIgPSAiRlUgdGltZSBbZGF5c10iLAogICAgICAgICBtYXJrLnRpbWUgPSBGQUxTRSwgYXhlcyA9IEZBTFNFLCBidHkgPSAibiIpCiAgICBsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgICAgICBjKCJsb3ciLCAiaGlnaCIpLAogICAgICAgICAgIHRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgIGNvbCA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgIGx0eSA9IGMoMSwyKSwgbHdkID0gMiwKICAgICAgICAgICBidHkgPSAibiIpCiAgICBheGlzKHNpZGUgPSAxLCBhdCA9IHNlcSgwLCAzLCBieSA9IDEpKQogICAgYXhpcyhzaWRlID0gMiwgYXQgPSBzZXEoMCwgMSwgYnkgPSAwLjIpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLkNveC4iLGVwLCIuMkcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVG9kYXksIi5BRURCLkNFQS5Db3guIixlcCwiLjRHLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCIuTU9ERUwxLjkwZGF5cy5wZGYiKSwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMTAsIG9uZWZpbGUgPSBUUlVFKQogICAgc2hvdyhzdW1tYXJ5KGNveCkpCgogICAgY2F0KHBhc3RlMCgiXG4gICA+IHdyaXRpbmcgdGhlIENveC1yZWdyZXNzaW9uIGZhc2hpenpsZSB0byBFeGNlbC4uLlxuIikpCgogICAgQ09YLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCiAgICBDT1gucmVzdWx0cy5URU1QWzEsXSA9IENPWC5TVEFUKGNveCwgIkFFREIuQ0VBIiwgZXAsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pCiAgICBDT1gucmVzdWx0cyA9IHJiaW5kKENPWC5yZXN1bHRzLCBDT1gucmVzdWx0cy5URU1QKQoKICB9Cn0KCmNhdCgiLSBFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKENPWC5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiT3V0Y29tZSIsICJDcEciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkhSIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiWi12YWx1ZSIsICJQLXZhbHVlIiwgIlNhbXBsZVNpemUiLCAiTl9ldmVudHMiKQoKY2F0KCItIENvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpDT1gucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkQmV0YSkKQ09YLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkcy5lLm0uKQpDT1gucmVzdWx0cyRIUiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEhSKQpDT1gucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkbG93OTVDSSkKQ09YLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkdXA5NUNJKQpDT1gucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgWi12YWx1ZWApCkNPWC5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGBQLXZhbHVlYCkKQ09YLnJlc3VsdHMkU2FtcGxlU2l6ZSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJFNhbXBsZVNpemUpCkNPWC5yZXN1bHRzJE5fZXZlbnRzIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkTl9ldmVudHMpCgpBRURCLkNFQS5DT1gucmVzdWx0cyA8LSBDT1gucmVzdWx0cwoKIyBTYXZlIHRoZSBkYXRhCmxpYnJhcnkob3Blbnhsc3gpCmNhdCgiLSBXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKaGVhZC5zdHlsZSA8LSBjcmVhdGVTdHlsZSh0ZXh0RGVjb3JhdGlvbiA9ICJCT0xEIikKd3JpdGUueGxzeChBRURCLkNFQS5DT1gucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkNveC4yRy5NT0RFTDEuOTBkYXlzLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCiNybShURU1QLkRGLCBwcm90ZWluLCBmaXQsIGNveCwgY294cGxvdCwgQ09YLnJlc3VsdHMsIENPWC5yZXN1bHRzLlRFTVAsIGhlYWQuc3R5bGUsIEFFREIuQ0VBLkNPWC5yZXN1bHRzKQoKI3JtKGhlYWQuc3R5bGUpCgpgYGAKCipNT0RFTCAyKgpgYGB7ciBDb3gtcmVncmVzc2lvbiBBbmFseXNpczogTU9ERUwgMiwgOTAgZGF5c30KIyBTZXQgdXAgYSBkYXRhZnJhbWUgdG8gcmVjZWl2ZSByZXN1bHRzCkNPWC5yZXN1bHRzIDwtIGRhdGEuZnJhbWUobWF0cml4KE5BLCBuY29sID0gMTIsIG5yb3cgPSAwKSkKCiMgTG9vcGluZyBvdmVyIGVhY2ggcHJvdGVpbi9lbmRwb2ludC90aW1lIGNvbWJpbmF0aW9uCmZvciAoaSBpbiAxOmxlbmd0aCh0aW1lczkwKSl7CiAgZXB0aW1lID0gdGltZXM5MFtpXQogIGVwID0gZW5kcG9pbnRzOTBbaV0KICBjYXQocGFzdGUwKCIqIEFuYWx5emluZyB0aGUgZWZmZWN0IG9mIHBsYXF1ZSBwcm90ZWlucyBvbiBbIixlcCwiXS5cbiIpKQogIGNhdCgiIC0gY3JlYXRpbmcgdGVtcG9yYXJ5IFNFIGZvciB0aGlzIHdvcmsuXG4iKQogIFRFTVAuREYgPSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBKQogIGNhdCgiIC0gbWFraW5nIGEgJ1N1cnYnIG9iamVjdCBhbmQgYWRkaW5nIHRoaXMgdG8gdGVtcG9yYXJ5IGRhdGFmcmFtZS5cbiIpCiAgVEVNUC5ERiRldmVudCA8LSBhcy5pbnRlZ2VyKFRFTVAuREZbLGVwXSkKICAjYXMuaW50ZWdlcihURU1QLkRGWyxlcF0gPT0gIkV4Y2x1ZGVkIikKCiAgVEVNUC5ERiR5IDwtIFN1cnYodGltZSA9IFRFTVAuREZbLGVwdGltZV0sIGV2ZW50ID0gVEVNUC5ERiRldmVudCkKICBjYXQoIiAtIG1ha2luZyBzdHJhdGEgb2YgZWFjaCBvZiB0aGUgcGxhcXVlIHByb3RlaW5zIGFuZCBzdGFydCBzdXJ2aXZhbCBhbmFseXNpcy5cbiIpCiAgCiAgZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKXsKICAgIGNhdChwYXN0ZTAoIiAgID4gcHJvY2Vzc2luZyBbIixUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dLCJdOyAiLHByb3RlaW4sIiBvdXQgb2YgIixsZW5ndGgoVFJBSVRTLlBST1RFSU4uUkFOSyksIiBwcm90ZWlucy5cbiIpKQogICAgIyBzcGxpdHRpbmcgaW50byB0d28gZ3JvdXBzCiAgICBURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSA8LSBjdXQyKFRFTVAuREZbLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl1dLCBnID0gMikKICAgIGNhdChwYXN0ZTAoIiAgID4gY3Jvc3MgdGFidWxhdGlvbiBvZiAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBzaG93KHRhYmxlKFRFTVAuREZbWyBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dIF1dKSkKICAgIAogICAgY2F0KHBhc3RlMCgiXG4gICA+IGZpdHRpbmcgdGhlIG1vZGVsIGZvciAiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi1zdHJhdHVtLlxuIikpCiAgICBmaXQgPC0gc3VydmZpdChhcy5mb3JtdWxhKHBhc3RlMCgieSB+ICIsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pKSwgZGF0YSA9IFRFTVAuREYpCiAgICAKICAgIGNhdChwYXN0ZTAoIlxuICAgPiBtYWtlIGEgS2FwbGFuLU1laWVyLXNoaXp6bGUuLi5cbiIpKQogICAgIyBtYWtlIEthcGxhbi1NZWllciBjdXJ2ZSBhbmQgc2F2ZSBpdAogICAgc2hvdyhnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IFRFTVAuREYsCiAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNEQjAwM0YiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAgICMgcGFsZXRlID0gYygiRjU5RDEwIiwgIiNEQjAwM0YiLCAiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSBjKDEsMiksCiAgICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC43NSwgMSksCiAgICAgICAgICAgICAgICAgICAgIyBsaW5ldHlwZSA9IGMoMSwyLDMsNCksCiAgICAgICAgICAgICAgICAgICAgIyBjb25mLmludCA9IEZBTFNFLCBjb25mLmludC5maWxsID0gIiM1OTVBNUMiLCBjb25mLmludC5hbHBoYSA9IDAuMSwKICAgICAgICAgICAgICAgICAgICBwdmFsID0gRkFMU0UsIHB2YWwubWV0aG9kID0gRkFMU0UsIHB2YWwuc2l6ZSA9IDQsCiAgICAgICAgICAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUsIHJpc2sudGFibGUueS50ZXh0ID0gRkFMU0UsIHRhYmxlcy55LnRleHQuY29sID0gVFJVRSwgZm9udHNpemUgPSA0LAogICAgICAgICAgICAgICAgICAgIGNlbnNvciA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gcGFzdGUwKCIiLFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIiIpLAogICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5sYWJzID0gYygibG93IiwgImhpZ2giKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMCgiUmlzayBvZiAiLGVwLCIiKSwgeGxhYiA9ICJUaW1lIFtkYXlzXSIsIGZvbnQubWFpbiA9IGMoMTYsICJib2xkIiwgImJsYWNrIikpKQogICAgZGV2LmNvcHkycGRmKGZpbGUgPSBwYXN0ZTAoQ09YX2xvYywiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RheSwiLkFFREIuQ0VBLnN1cnZpdmFsLiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiLjkwZGF5cy5wZGYiKSwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIG9uZWZpbGUgPSBGQUxTRSkKCiAgICBjYXQocGFzdGUwKCJcbiAgID4gcGVyZm9ybSB0aGUgQ294LXJlZ3Jlc3Npb24gZmFzaGl6emxlIGFuZCBwbG90IGl0Li4uXG4iKSkKICAgICMjIyBEbyBDb3gtcmVncmVzc2lvbiBhbmQgcGxvdCBpdAogICAgCiAgICAjIyMgTU9ERUwgMiBhZGp1c3RlZCBmb3IgYWdlLCBzZXgsIGh5cGVydGVuc2lvbiwgZGlhYmV0ZXMsIHNtb2tpbmcsIExETC1DIGxldmVscywgbGlwaWQtbG93ZXJpbmcgZHJ1Z3MsIGFudGlwbGF0ZWxldCBkcnVncywgZUdGUiwgQk1JLCBoaXN0b3J5IG9mIENWRCwgbGV2ZWwgb2Ygc3Rlbm9zaXMKICAgIGNveCA9IGNveHBoKFN1cnYoVEVNUC5ERlssZXB0aW1lXSwgZXZlbnQpIH4gVEVNUC5ERltbIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0gXV0rQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKICAgIGNveHBsb3QgPSBjb3hwaChTdXJ2KFRFTVAuREZbLGVwdGltZV0sIGV2ZW50KSB+IHN0cmF0YShURU1QLkRGW1sgVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSBdXSkrQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyBIeXBlcnRlbnNpb24uY29tcG9zaXRlICsgRGlhYmV0ZXNTdGF0dXMgKyBTbW9rZXJTdGF0dXMgKyBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyBNZWRIeF9DVkQgKyBzdGVub3NlLCBkYXRhID0gVEVNUC5ERikKCiAgCiAgICBwbG90KHN1cnZmaXQoY294cGxvdCksIG1haW4gPSBwYXN0ZTAoIkNveCBwcm9wb3J0aW9uYWwgaGF6YXJkIG9mIFsiLGVwLCJdIHBlciBbIixlcHRpbWUsIl0uIiksCiAgICAgICAgIHlsaW0gPSBjKDAuNzUsIDEpLCB4bGltID0gYygwLDMpLCBjb2wgPSBjKCIjREIwMDNGIiwgIiMxMjkwRDkiKSwKICAgICAgICAgIyB5bGltID0gYygwLCAxKSwgeGxpbSA9IGMoMCwzKSwgY29sID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgIGx0eSA9IGMoMSwyKSwgbHdkID0gMiwKICAgICAgICAgeWxhYiA9ICJTdXZpdmFsIHByb2JhYmlsaXR5IiwgeGxhYiA9ICJGVSB0aW1lIFtkYXlzXSIsCiAgICAgICAgIG1hcmsudGltZSA9IEZBTFNFLCBheGVzID0gRkFMU0UsIGJ0eSA9ICJuIikKICAgIGxlZ2VuZCgidG9wcmlnaHQiLAogICAgICAgICAgIGMoImxvdyIsICJoaWdoIiksCiAgICAgICAgICAgdGl0bGUgPSBwYXN0ZTAoIiIsVFJBSVRTLlBST1RFSU4uUkFOS1twcm90ZWluXSwiIiksCiAgICAgICAgICAgY29sID0gYygiI0RCMDAzRiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgbHR5ID0gYygxLDIpLCBsd2QgPSAyLAogICAgICAgICAgIGJ0eSA9ICJuIikKICAgIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKDAsIDMsIGJ5ID0gMSkpCiAgICBheGlzKHNpZGUgPSAyLCBhdCA9IHNlcSgwLCAxLCBieSA9IDAuMikpCiAgICBkZXYuY29weTJwZGYoZmlsZSA9IHBhc3RlMChDT1hfbG9jLCIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZGF5LCIuQUVEQi5DRUEuQ294LiIsZXAsIi4yRy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUb2RheSwiLkFFREIuQ0VBLkNveC4iLGVwLCIuNEcuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0sIi5NT0RFTDIuOTBkYXlzLnBkZiIpLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAxMCwgb25lZmlsZSA9IFRSVUUpCgogICAgc2hvdyhzdW1tYXJ5KGNveCkpCgogICAgY2F0KHBhc3RlMCgiXG4gICA+IHdyaXRpbmcgdGhlIENveC1yZWdyZXNzaW9uIGZhc2hpenpsZSB0byBFeGNlbC4uLlxuIikpCgogICAgQ09YLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDEyLCBucm93ID0gMCkpCiAgICBDT1gucmVzdWx0cy5URU1QWzEsXSA9IENPWC5TVEFUKGNveCwgIkFFREIuQ0VBIiwgZXAsIFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0pCiAgICBDT1gucmVzdWx0cyA9IHJiaW5kKENPWC5yZXN1bHRzLCBDT1gucmVzdWx0cy5URU1QKQoKICB9Cn0KCmNhdCgiLSBFZGl0IHRoZSBjb2x1bW4gbmFtZXMuLi5cbiIpCmNvbG5hbWVzKENPWC5yZXN1bHRzKSA9IGMoIkRhdGFzZXQiLCAiT3V0Y29tZSIsICJDcEciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkhSIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiWi12YWx1ZSIsICJQLXZhbHVlIiwgIlNhbXBsZVNpemUiLCAiTl9ldmVudHMiKQoKY2F0KCItIENvcnJlY3QgdGhlIHZhcmlhYmxlIHR5cGVzLi4uXG4iKQpDT1gucmVzdWx0cyRCZXRhIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkQmV0YSkKQ09YLnJlc3VsdHMkcy5lLm0uIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkcy5lLm0uKQpDT1gucmVzdWx0cyRIUiA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJEhSKQpDT1gucmVzdWx0cyRsb3c5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkbG93OTVDSSkKQ09YLnJlc3VsdHMkdXA5NUNJIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkdXA5NUNJKQpDT1gucmVzdWx0cyRgWi12YWx1ZWAgPC0gYXMubnVtZXJpYyhDT1gucmVzdWx0cyRgWi12YWx1ZWApCkNPWC5yZXN1bHRzJGBQLXZhbHVlYCA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJGBQLXZhbHVlYCkKQ09YLnJlc3VsdHMkU2FtcGxlU2l6ZSA8LSBhcy5udW1lcmljKENPWC5yZXN1bHRzJFNhbXBsZVNpemUpCkNPWC5yZXN1bHRzJE5fZXZlbnRzIDwtIGFzLm51bWVyaWMoQ09YLnJlc3VsdHMkTl9ldmVudHMpCgpBRURCLkNFQS5DT1gucmVzdWx0cyA8LSBDT1gucmVzdWx0cwoKIyBTYXZlIHRoZSBkYXRhCmNhdCgiLSBXcml0aW5nIHJlc3VsdHMgdG8gRXhjZWwtZmlsZS4uLlxuIikKaGVhZC5zdHlsZSA8LSBjcmVhdGVTdHlsZSh0ZXh0RGVjb3JhdGlvbiA9ICJCT0xEIikKd3JpdGUueGxzeChBRURCLkNFQS5DT1gucmVzdWx0cywKICAgICAgICAgICBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLkNveC4yRy5NT0RFTDIuOTBkYXlzLnhsc3giKSwKICAgICAgICAgICBjcmVhdG9yID0gIlNhbmRlciBXLiB2YW4gZGVyIExhYW4iLAogICAgICAgICAgIHNoZWV0TmFtZSA9ICJSZXN1bHRzIiwgaGVhZGVyU3R5bGUgPSBoZWFkLnN0eWxlLAogICAgICAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBvdmVyd3JpdGUgPSBUUlVFKQoKIyBSZW1vdmluZyBpbnRlcm1lZGlhdGVzCmNhdCgiLSBSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRFTVAuREYsIHByb3RlaW4sIGZpdCwgY294LCBjb3hwbG90LCBDT1gucmVzdWx0cywgQ09YLnJlc3VsdHMuVEVNUCwgaGVhZC5zdHlsZSwgQUVEQi5DRUEuQ09YLnJlc3VsdHMpCgpybShoZWFkLnN0eWxlKQoKYGBgCgoKCiMgQ29ycmVsYXRpb25zCldlIGNvcnJlbGF0ZWQgcGxhcXVlIGxldmVscyBvZiB0aGUgYmlvbWFya2Vycy4KCiMjIE1DUDEgcGxhcXVlIGxldmVscwoKYGBge3IgQ3Jvc3NTYW1wbGVUeXBlIENvcnJlbGF0aW9uc30KCiMgSW5zdGFsbGF0aW9uIG9mIGdnY29ycnBsb3QoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmKCFyZXF1aXJlKGRldnRvb2xzKSkgCiAgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQpkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoImthc3NhbWJhcmEvZ2djb3JycGxvdCIpCgpsaWJyYXJ5KGdnY29ycnBsb3QpCgoKIyBDcmVhdGluZyBtYXRyaXggLSBpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFFREIuQ0VBLnRlbXAgPC0gc3Vic2V0KEFFREIuQ0VBLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IGMoIklMNl9yYW5rIiwgIk1DUDFfcmFuayIsICJJTDZfcGdfdWdfMjAxNV9yYW5rIiwgIk1DUDFfcGdfdWdfMjAxNV9yYW5rIiwgIklMNlJfcGdfdWdfMjAxNV9yYW5rIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5CSU4sIFRSQUlUUy5DT04uUkFOSykKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiMgQUVEQi5DRUEudGVtcCA8LSBzdWJzZXQoQUVEQi5DRUEsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYygiTUNQMV9yYW5rIiwgIk1DUDFfcGdfdWdfMjAxNV9yYW5rIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5CSU4sIFRSQUlUUy5DT04uUkFOSykKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCkFFREIuQ0VBLnRlbXAgPC0gc3Vic2V0KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSBjKCJNQ1AxX3BnX21sXzIwMTVfcmFuayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFJVFMuQklOLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUlUUy5DT04uUkFOSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTeW1wdG9tcy41RyIsICJBc3ltcHRTeW1wdCIsICJFUF9tYWpvciIsICJFUF9jb21wb3NpdGUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCgoKQUVEQi5DRUEudGVtcCRDYWxjaWZpY2F0aW9uUGxhcXVlIDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRDYWxjaWZpY2F0aW9uUGxhcXVlKQpBRURCLkNFQS50ZW1wJENvbGxhZ2VuUGxhcXVlIDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRDb2xsYWdlblBsYXF1ZSkKQUVEQi5DRUEudGVtcCRGYXQxMFBlcmMgPC0gYXMubnVtZXJpYyhBRURCLkNFQS50ZW1wJEZhdDEwUGVyYykKQUVEQi5DRUEudGVtcCRNQUNfYmlubmVkIDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRNQUNfYmlubmVkKQpBRURCLkNFQS50ZW1wJFNNQ19iaW5uZWQgPC0gYXMubnVtZXJpYyhBRURCLkNFQS50ZW1wJFNNQ19iaW5uZWQpCkFFREIuQ0VBLnRlbXAkSVBIIDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRJUEgpCkFFREIuQ0VBLnRlbXAkU3ltcHRvbXMuNUcgPC0gYXMubnVtZXJpYyhBRURCLkNFQS50ZW1wJFN5bXB0b21zLjVHKQpBRURCLkNFQS50ZW1wJEFzeW1wdFN5bXB0IDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRBc3ltcHRTeW1wdCkKQUVEQi5DRUEudGVtcCRFUF9tYWpvciA8LSBhcy5udW1lcmljKEFFREIuQ0VBLnRlbXAkRVBfbWFqb3IpCkFFREIuQ0VBLnRlbXAkRVBfY29tcG9zaXRlIDwtIGFzLm51bWVyaWMoQUVEQi5DRUEudGVtcCRFUF9jb21wb3NpdGUpCnN0cihBRURCLkNFQS50ZW1wKQpBRURCLkNFQS5tYXRyaXguUkFOSyA8LSBhcy5tYXRyaXgoQUVEQi5DRUEudGVtcCkKcm0oQUVEQi5DRUEudGVtcCkKCmNvcnJfYmlvbWFya2Vycy5yYW5rIDwtIHJvdW5kKGNvcihBRURCLkNFQS5tYXRyaXguUkFOSywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIsICN0aGUgY29ycmVsYXRpb24gb3IgY292YXJpYW5jZSBiZXR3ZWVuIGVhY2ggcGFpciBvZiB2YXJpYWJsZXMgaXMgY29tcHV0ZWQgdXNpbmcgYWxsIGNvbXBsZXRlIHBhaXJzIG9mIG9ic2VydmF0aW9ucyBvbiB0aG9zZSB2YXJpYWJsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3BlYXJtYW4iKSwgMykKIyBjb3JyX2Jpb21hcmtlcnMucmFuawoKY29ycl9iaW9tYXJrZXJzX3AucmFuayA8LSBnZ2NvcnJwbG90Ojpjb3JfcG1hdChBRURCLkNFQS5tYXRyaXguUkFOSywgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIsIG1ldGhvZCA9ICJzcGVhcm1hbiIpCgojIEFkZCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGFyZ3VtZW50IGxhYiA9IFRSVUUKZ2djb3JycGxvdChjb3JyX2Jpb21hcmtlcnMucmFuaywgCiAgICAgICAgICAgbWV0aG9kID0gInNxdWFyZSIsIAogICAgICAgICAgIHR5cGUgPSAibG93ZXIiLAogICAgICAgICAgIHRpdGxlID0gIkNyb3NzIGJpb21hcmtlciBjb3JyZWxhdGlvbnMiLCAKICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFRSVUUsIGxlZ2VuZC50aXRsZSA9IGJxdW90ZSgiU3BlYXJtYW4ncyJ+aXRhbGljKHJobykpLAogICAgICAgICAgIGdndGhlbWUgPSBnZ3Bsb3QyOjp0aGVtZV9taW5pbWFsLCBvdXRsaW5lLmNvbG9yID0gIiNGRkZGRkYiLAogICAgICAgICAgIHNob3cuZGlhZyA9IFRSVUUsCiAgICAgICAgICAgaGMub3JkZXIgPSBGQUxTRSwgCiAgICAgICAgICAgbGFiID0gRkFMU0UsCiAgICAgICAgICAgZGlnaXRzID0gMywKICAgICAgICAgICAjIHAubWF0ID0gY29ycl9iaW9tYXJrZXJzX3AucmFuaywgc2lnLmxldmVsID0gMC4wNSwKICAgICAgICAgICBjb2xvcnMgPSBjKCIjMTI5MEQ5IiwgIiNGRkZGRkYiLCAiI0U1NTczOCIpKQoKYGBgCgpgYGB7ciBNQ1AxIENvcnJlbGF0aW9ucyB0YWJsZX0KIyBmbGF0dGVuQ29yck1hdHJpeAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgY29ybWF0IDogbWF0cml4IG9mIHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMKIyBwbWF0IDogbWF0cml4IG9mIHRoZSBjb3JyZWxhdGlvbiBwLXZhbHVlcwpmbGF0dGVuQ29yck1hdHJpeCA8LSBmdW5jdGlvbihjb3JtYXQsIHBtYXQpIHsKICB1dCA8LSB1cHBlci50cmkoY29ybWF0KQogIGRhdGEuZnJhbWUoCiAgICBiaW9tYXJrZXJfcm93ID0gcm93bmFtZXMoY29ybWF0KVtyb3coY29ybWF0KVt1dF1dLAogICAgYmlvbWFya2VyX2NvbHVtbiA9IHJvd25hbWVzKGNvcm1hdClbY29sKGNvcm1hdClbdXRdXSwKICAgIHNwZWFybWFuX2NvciAgPShjb3JtYXQpW3V0XSwKICAgIHB2YWwgPSBwbWF0W3V0XQogICAgKQp9Cgpjb3JyX2Jpb21hcmtlcnMucmFuay5kZiA8LSBhcy5kYXRhLnRhYmxlKGZsYXR0ZW5Db3JyTWF0cml4KGNvcnJfYmlvbWFya2Vycy5yYW5rLCBjb3JyX2Jpb21hcmtlcnNfcC5yYW5rKSkKRFQ6OmRhdGF0YWJsZShjb3JyX2Jpb21hcmtlcnMucmFuay5kZikKCmBgYAoKYGBge3IgTUNQMSBDb3JyZWxhdGlvbnMgYWx0ZXJuYXRpdmUgdmlzdWFsIDF9CiMgY2hhcnQgb2YgYSBjb3JyZWxhdGlvbiBtYXRyaXgKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFsdGVybmF0aXZlIHNvbHV0aW9uIGh0dHBzOi8vd3d3LnItZ3JhcGgtZ2FsbGVyeS5jb20vMTk5LWNvcnJlbGF0aW9uLW1hdHJpeC13aXRoLWdnYWxseS5odG1sCmluc3RhbGwucGFja2FnZXMuYXV0bygiUGVyZm9ybWFuY2VBbmFseXRpY3MiKQpjaGFydC5Db3JyZWxhdGlvbi5uZXcgPC0gZnVuY3Rpb24gKFIsIGhpc3RvZ3JhbSA9IFRSVUUsIG1ldGhvZCA9IGMoInBlYXJzb24iLCAia2VuZGFsbCIsIAogICAgInNwZWFybWFuIiksIC4uLikgCnsKICAgIHggPSBjaGVja0RhdGEoUiwgbWV0aG9kID0gIm1hdHJpeCIpCiAgICBpZiAobWlzc2luZyhtZXRob2QpKSAKICAgICAgICBtZXRob2QgPSBtZXRob2RbMV0KICAgIGNvcm1ldGggPC0gbWV0aG9kCiAgICBwYW5lbC5jb3IgPC0gZnVuY3Rpb24oeCwgeSwgZGlnaXRzID0gMiwgcHJlZml4ID0gIiIsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiLCAKICAgICAgICBtZXRob2QgPSBjb3JtZXRoLCBjZXguY29yLCAuLi4pIHsKICAgICAgICB1c3IgPC0gcGFyKCJ1c3IiKQogICAgICAgIG9uLmV4aXQocGFyKHVzcikpCiAgICAgICAgcGFyKHVzciA9IGMoMCwgMSwgMCwgMSkpCiAgICAgICAgciA8LSBjb3IoeCwgeSwgdXNlID0gdXNlLCBtZXRob2QgPSBtZXRob2QpCiAgICAgICAgdHh0IDwtIGZvcm1hdChjKHIsIDAuMTIzNDU2Nzg5KSwgZGlnaXRzID0gZGlnaXRzKVsxXQogICAgICAgIHR4dCA8LSBwYXN0ZShwcmVmaXgsIHR4dCwgc2VwID0gIiIpCiAgICAgICAgaWYgKG1pc3NpbmcoY2V4LmNvcikpIAogICAgICAgICAgICBjZXggPC0gMC44L3N0cndpZHRoKHR4dCkKICAgICAgICB0ZXN0IDwtIGNvci50ZXN0KGFzLm51bWVyaWMoeCksIGFzLm51bWVyaWMoeSksIG1ldGhvZCA9IG1ldGhvZCkKICAgICAgICBTaWduaWYgPC0gc3ltbnVtKHRlc3QkcC52YWx1ZSwgY29yciA9IEZBTFNFLCBuYSA9IEZBTFNFLCAKICAgICAgICAgICAgY3V0cG9pbnRzID0gYygwLCAwLjAwMSwgMC4wMSwgMC4wNSwgMC4xLCAxKSwgc3ltYm9scyA9IGMoIioqKiIsIAogICAgICAgICAgICAgICAgIioqIiwgIioiLCAiLiIsICIgIikpCiAgICAgICAgdGV4dCgwLjUsIDAuNSwgdHh0LCBjZXggPSBjZXggKiAoYWJzKHIpICsgMC4zKS8xLjMpCiAgICAgICAgdGV4dCgwLjgsIDAuOCwgU2lnbmlmLCBjZXggPSBjZXgsIGNvbCA9IDIpCiAgICB9CiAgICBmIDwtIGZ1bmN0aW9uKHQpIHsKICAgICAgICBkbm9ybSh0LCBtZWFuID0gbWVhbih4KSwgc2QgPSBzZC54dHMoeCkpCiAgICB9CiAgICBkb3RhcmdzIDwtIGxpc3QoLi4uKQogICAgZG90YXJncyRtZXRob2QgPC0gTlVMTAogICAgcm0obWV0aG9kKQogICAgaGlzdC5wYW5lbCA9IGZ1bmN0aW9uKHgsIC4uLiA9IE5VTEwpIHsKICAgICAgICBwYXIobmV3ID0gVFJVRSkKICAgICAgICBoaXN0KHgsIGNvbCA9ICIjMTI5MEQ5IiwgcHJvYmFiaWxpdHkgPSBUUlVFLCBheGVzID0gRkFMU0UsIAogICAgICAgICMgaGlzdCh4LCBjb2wgPSAibGlnaHQgZ3JheSIsIHByb2JhYmlsaXR5ID0gVFJVRSwgYXhlcyA9IEZBTFNFLCAKICAgICAgICAgICAgbWFpbiA9ICIiLCBicmVha3MgPSAiRkQiKQogICAgICAgIGxpbmVzKGRlbnNpdHkoeCwgbmEucm0gPSBUUlVFKSwgY29sID0gIiNFNTU3MzgiLCBsd2QgPSAxKQogICAgICAgIHJ1Zyh4KQogICAgfQogICAgaWYgKGhpc3RvZ3JhbSkgCiAgICAgICAgcGFpcnMoeCwgZ2FwID0gMCwgbG93ZXIucGFuZWwgPSBwYW5lbC5zbW9vdGgsIHVwcGVyLnBhbmVsID0gcGFuZWwuY29yLCAKICAgICAgICAgICAgZGlhZy5wYW5lbCA9IGhpc3QucGFuZWwsIC4uLikKICAgIGVsc2UgcGFpcnMoeCwgZ2FwID0gMCwgbG93ZXIucGFuZWwgPSBwYW5lbC5zbW9vdGgsIHVwcGVyLnBhbmVsID0gcGFuZWwuY29yLCAuLi4pCn0KCgpjaGFydC5Db3JyZWxhdGlvbi5uZXcoQUVEQi5DRUEubWF0cml4LlJBTkssIG1ldGhvZCA9ICJzcGVhcm1hbiIsIGhpc3RvZ3JhbSA9IFRSVUUsIHBjaCA9IDMpCmBgYAoKCmBgYHtyIE1DUDEgQ29ycmVsYXRpb25zIGFsdGVybmF0aXZlIHZpc3VhbCAyfQojIGFsdGVybmF0aXZlIGNoYXJ0IG9mIGEgY29ycmVsYXRpb24gbWF0cml4CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBbHRlcm5hdGl2ZSBzb2x1dGlvbiBodHRwczovL3d3dy5yLWdyYXBoLWdhbGxlcnkuY29tLzE5OS1jb3JyZWxhdGlvbi1tYXRyaXgtd2l0aC1nZ2FsbHkuaHRtbAppbnN0YWxsLnBhY2thZ2VzLmF1dG8oIkdHYWxseSIpCgojIFF1aWNrIGRpc3BsYXkgb2YgdHdvIGNhYmFwaWxpdGllcyBvZiBHR2FsbHksIHRvIGFzc2VzcyB0aGUgZGlzdHJpYnV0aW9uIGFuZCBjb3JyZWxhdGlvbiBvZiB2YXJpYWJsZXMgCmxpYnJhcnkoR0dhbGx5KQogCiMgRnJvbSB0aGUgaGVscCBwYWdlOgoKZ2dwYWlycyhBRURCLkNFQSwKICAgICAgICBjb2x1bW5zID0gYygiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCBUUkFJVFMuQklOLCBUUkFJVFMuQ09OLlJBTkssICJTeW1wdG9tcy41RyIsICJBc3ltcHRTeW1wdCIsICJFUF9tYWpvciIsICJFUF9jb21wb3NpdGUiKSwKICAgICAgICBjb2x1bW5MYWJlbHMgPSBjKCJNQ1AxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYWxjaWZpY2F0aW9uIiwgIkNvbGxhZ2VuIiwgIkZhdCAxMCUiLCAiSVBIIiwgIk1hY3JvcGhhZ2VzIChiaW5uZWQpIiwgIlNNQyAoYmlubmVkKSIsICJNYWNyb3BoYWdlcyIsICJTTUMiLCAiTWFjcm9waGFnZS9TTUMiLCAiVmVzc2VsIGRlbnNpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlN5bXB0b21zIiwgIlN5bXB0b21zIChncm91cGVkKSIsICJNQUNFIiwgIkNvbXBvc2l0ZSIpLAogICAgICAgIG1ldGhvZCA9IGMoInNwZWFybWFuIiksCiAgICAgICAgIyBnZ3Bsb3QyOjphZXMoY29sb3VyID0gR2VuZGVyKSwKICAgICAgICBwcm9ncmVzcyA9IEZBTFNFKQoKYGBgCgoKIyBBZGRpdGlvbmFsIGZpZ3VyZXMKCiMjIEFnZSBhbmQgc2V4CldlIHdhbnQgdG8gY3JlYXRlIHBlci1hZ2UtZ3JvdXAgZmlndXJlcy4gCgotIEJveCBhbmQgV2hpc2tlciBwbG90IGZvciBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGJ5IHNleC4KLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSAoc2V4IGFuZCkgYWdlIGdyb3VwICg8NTUsIDU1LTY0LCA2NS03NCwgNzUtODQsIDg1KykuCgoKIyMjIEludmVyc2UtcmFuayB0cmFuc2Zvcm1lZCBkYXRhCgpgYGB7ciBNQ1AxIHBlciBTZXgsIHJhbmtlZH0KCiMgP2dncHVicjo6Z2dib3hwbG90KCkKCiMgR2xvYmFsIHRlc3QKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEdlbmRlciwgIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkdlbmRlciIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKYGBgCgojIyMgUmF3IGRhdGEKClNpbWFsYXJseSBidXQgbm93IGZvciB0aGUgcmF3IGRhdGEgYXMgbWVkaWFuIMKxIGludGVycXVhcnRpbGUgcmFuZ2UuCgpgYGB7ciBNQ1AxIHBlciBTZXh9CgojID9nZ3B1YnI6OmdnYm94cGxvdCgpCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gR2VuZGVyLCAgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gYygiR2VuZGVyIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5HZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgpgYGAKCmBgYHtyIEFnZUdyb3Vwc30KbGlicmFyeShkcGx5cikKCkFFREIuQ0VBIDwtIEFFREIuQ0VBICU+JSBtdXRhdGUoQWdlR3JvdXAgPSBmYWN0b3IoY2FzZV93aGVuKEFnZSA8IDU1IH4gIjw1NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDU1ICAmIEFnZSA8PSA2NCB+ICI1NS02NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDY1ICAmIEFnZSA8PSA3NCB+ICI2NS03NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDc1ICAmIEFnZSA8PSA4NCB+ICI3NS04NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDg1IH4gIjg1KyIpKSkgCgpBRURCLkNFQSA8LSBBRURCLkNFQSAlPiUgbXV0YXRlKEFnZUdyb3VwU2V4ID0gZmFjdG9yKGNhc2Vfd2hlbihBZ2UgPCA1NSAmIEdlbmRlciA9PSAibWFsZSIgfiAiPDU1IG1hbGVzIiAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDU1ICAmIEFnZSA8PSA2NCAmIEdlbmRlciA9PSAibWFsZSJ+ICI1NS02NCBtYWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDY1ICAmIEFnZSA8PSA3NCAmIEdlbmRlciA9PSAibWFsZSJ+ICI2NS03NCBtYWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDc1ICAmIEFnZSA8PSA4NCAmIEdlbmRlciA9PSAibWFsZSJ+ICI3NS04NCBtYWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDg1ICYgR2VuZGVyID09ICJtYWxlIn4gIjg1KyBtYWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlIDwgNTUgJiBHZW5kZXIgPT0gImZlbWFsZSIgfiAiPDU1IGZlbWFsZXMiICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2UgPj0gNTUgICYgQWdlIDw9IDY0ICYgR2VuZGVyID09ICJmZW1hbGUifiAiNTUtNjQgZmVtYWxlcyAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnZSA+PSA2NSAgJiBBZ2UgPD0gNzQgJiBHZW5kZXIgPT0gImZlbWFsZSJ+ICI2NS03NCBmZW1hbGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2UgPj0gNzUgICYgQWdlIDw9IDg0ICYgR2VuZGVyID09ICJmZW1hbGUifiAiNzUtODQgZmVtYWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlID49IDg1ICYgR2VuZGVyID09ICJmZW1hbGUifiAiODUrIGZlbWFsZXMiKSkpCgp0YWJsZShBRURCLkNFQSRBZ2VHcm91cCwgQUVEQi5DRUEkR2VuZGVyKQp0YWJsZShBRURCLkNFQSRBZ2VHcm91cFNleCkKCmBgYAoKTm93IHdlIGNhbiBkcmF3IHNvbWUgZ3JhcGhzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyBwZXIgc2V4IGFuZCBhZ2UgZ3JvdXAuCgojIyMgSW52ZXJzZS1yYW5rIHRyYW5zZm9ybWVkIGRhdGEKCmBgYHtyIE1DUDEgcGVyIEFnZUdyb3VwIHBlciBTZXgsIHJhbmtlZH0KCiMgP2dncHVicjo6Z2dib3hwbG90KCkKCiMgR2xvYmFsIHRlc3QKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEFnZUdyb3VwLCAgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gYygiQWdlR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkFnZSBncm91cHMgKHllYXJzKSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJBZ2VHcm91cCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQWdlR3JvdXApLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuQWdlR3JvdXAucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBBZ2VHcm91cCwgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gYygiQWdlR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkFnZSBncm91cHMgKHllYXJzKSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIsCiAgICAgICAgICAgICAgICAgIGdndGhlbW5lID0gdGhlbWVfbWluaW1hbCgpKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5BZ2VHcm91cF9wZXJHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKYGBgCgojIyMgUmF3IGRhdGEKClNpbWFsYXJseSBidXQgbm93IGZvciB0aGUgcmF3IGRhdGEgYXMgbWVkaWFuIMKxIGludGVycXVhcnRpbGUgcmFuZ2UuCgpgYGB7ciBNQ1AxIHBlciBBZ2VHcm91cCBwZXIgU2V4fQoKIyA/Z2dwdWJyOjpnZ2JveHBsb3QoKQpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEFnZUdyb3VwLCAgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gYygiQWdlR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJBZ2UgZ3JvdXBzICh5ZWFycykiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJBZ2VHcm91cCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgIyBhZGQgPSAibWVkaWFuX2lxciIpCiAgICAgICAgICAgICAgICAgIGFkZCA9IGMoIm1lZGlhbl9pcXIiLCAiaml0dGVyIikpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gQWdlR3JvdXApLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LkFnZUdyb3VwLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEFnZUdyb3VwLCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJBZ2VHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkFnZSBncm91cHMgKHllYXJzKSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICAjIGFkZCA9ICJtZWRpYW5faXFyIikKICAgICAgICAgICAgICAgICAgYWRkID0gYygibWVkaWFuX2lxciIsICJqaXR0ZXIiKSkgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LkFnZUdyb3VwX3BlckdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQpgYGAKCgojIyBIeXBlcnRlbnNpb24gJiBibG9vZCBwcmVzc3VyZQpXZSB3YW50IHRvIGNyZWF0ZSBmaWd1cmVzIG9mIE1DUDEgbGV2ZWxzIHN0cmF0aWZpZWQgYnkgaHlwZXJ0ZW5zaW9uL2Jsb29kIHByZXNzdXJlLCBhbmQgdXNlIG9mIGFudGktaHlwZXJ0ZW5zaXZlIGRydWdzLiAKCi0gQm94IGFuZCBXaGlza2VyIHBsb3QgZm9yIE1DUC0xIHBsYXF1ZSBsZXZlbHMgYnkgaHlwZXJ0ZW5zaW9uIGdyb3VwIChubywgeWVzKQotIEJveCBhbmQgV2hpc2tlciBwbG90IGZvciBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGJ5IHN5c3RvbGljIGJsb29kIHByZXNzdXJlIGdyb3VwICg8MTIwLCAxMjAtMTM5LCAxNDAtMTU5LDE2MCspCgoKYGBge3IgQmxvb2RQcmVzc3VyZX0KbGlicmFyeShkcGx5cikKCkFFREIuQ0VBIDwtIEFFREIuQ0VBICU+JSBtdXRhdGUoU0JQR3JvdXAgPSBmYWN0b3IoY2FzZV93aGVuKHN5c3RvbGljIDwgMTIwIH4gIjwxMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RvbGljID49IDEyMCAgJiBzeXN0b2xpYyA8PSAxMzkgfiAiMTIwLTEzOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdG9saWMgPj0gMTQwICAmIHN5c3RvbGljIDw9IDE1OSB+ICIxNDAtMTU5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0b2xpYyA+PSAxNjAgfiAiMTYwKyIpKSkgCgp0YWJsZShBRURCLkNFQSRTQlBHcm91cCwgQUVEQi5DRUEkR2VuZGVyKQoKYGBgCgpOb3cgd2UgY2FuIGRyYXcgc29tZSBncmFwaHMgb2YgcGxhcXVlIE1DUDEgbGV2ZWxzIHBlciBzZXggYW5kIGh5cGVydGVuc2lvbi9ibG9vZCBwcmVzc3VyZSBncm91cC4KCiMjIyBJbnZlcnNlLXJhbmsgdHJhbnNmb3JtZWQgZGF0YQoKYGBge3IgTUNQMSBwZXIgQmxvb2RQcmVzc3VyZSBwZXIgU2V4LCByYW5rZWR9CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBTQlBHcm91cCwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNCUEdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTQlBHcm91cCkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIlNCUEdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSAobW1IZykiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiU0JQR3JvdXAiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IFNCUEdyb3VwKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLlNCUEdyb3VwLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU2VsZi1yZXBvcnRlZCBoeXBlcnRlbnNpb24iLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkh5cGVydGVuc2lvbi5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEh5cGVydGVuc2lvbi5kcnVncywgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5kcnVncykpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLmRydWdzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJ0ZW5zaW9uLmRydWdzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJIeXBlcnRlbnNpb24gbWVkaWNhdGlvbiB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBIeXBlcnRlbnNpb24uZHJ1Z3MpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuSHlwZXJ0ZW5zaW9uRHJ1Z3MucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IFNCUEdyb3VwLCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoU0JQR3JvdXApKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNCUEdyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU0JQR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIChtbUhnKSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLlNCUEdyb3VwX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU2VsZi1yZXBvcnRlZCBoeXBlcnRlbnNpb24gcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5IeXBlcnRlbnNpb25fYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBIeXBlcnRlbnNpb24uZHJ1Z3MsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5kcnVncykpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkh5cGVydGVuc2lvbi5kcnVncyIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiSHlwZXJ0ZW5zaW9uIG1lZGljYXRpb24gdXNlIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuSHlwZXJ0ZW5zaW9uLmRydWdzX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgoKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBTQlBHcm91cCwgZ3JvdXAuYnkgPSAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNCUEdyb3VwKSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNCUEdyb3VwKSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJTQlBHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUgKG1tSGcpIGJ5IG1lZGljYXRpb24gdXNlIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkh5cGVydGVuc2lvbi5kcnVncyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjNDlBMDFEIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gSHlwZXJ0ZW5zaW9uLmRydWdzKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLlNCUEdyb3VwX2J5SHlwZXJ0ZW5zaW9uRHJ1Z3MucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCwgZ3JvdXAuYnkgPSAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU2VsZi1yZXBvcnRlZCBoeXBlcnRlbnNpb24gYnkgbWVkaWNhdGlvbiB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiM0OUEwMUQiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBIeXBlcnRlbnNpb24uZHJ1Z3MpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnRfYnlIeXBlcnRlbnNpb25EcnVncy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCmBgYAoKCiMjIyBSYXcgZGF0YQoKU2ltYWxhcmx5IGJ1dCBub3cgZm9yIHRoZSByYXcgZGF0YSBhcyBtZWRpYW4gwrEgaW50ZXJxdWFydGlsZSByYW5nZS4KCgpgYGB7ciBNQ1AxIHBlciBCbG9vZFByZXNzdXJlIHBlciBTZXh9CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gU0JQR3JvdXAsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTQlBHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoU0JQR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJTQlBHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIChtbUhnKSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIlNCUEdyb3VwIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBTQlBHcm91cCksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuU0JQR3JvdXAucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlNlbGYtcmVwb3J0ZWQgaHlwZXJ0ZW5zaW9uIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5IeXBlcnRlbnNpb24ucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gSHlwZXJ0ZW5zaW9uLmRydWdzLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLmRydWdzKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uZHJ1Z3MiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJIeXBlcnRlbnNpb24gbWVkaWNhdGlvbiB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJIeXBlcnRlbnNpb24uZHJ1Z3MiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEh5cGVydGVuc2lvbi5kcnVncyksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuSHlwZXJ0ZW5zaW9uRHJ1Z3MucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBTQlBHcm91cCwgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNCUEdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTQlBHcm91cCkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIlNCUEdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUgKG1tSGcpIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuU0JQR3JvdXBfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLnNlbGZyZXBvcnQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlNlbGYtcmVwb3J0ZWQgaHlwZXJ0ZW5zaW9uIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuSHlwZXJ0ZW5zaW9uX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEh5cGVydGVuc2lvbi5kcnVncywgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5kcnVncykpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJ0ZW5zaW9uLmRydWdzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJ0ZW5zaW9uLmRydWdzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiSHlwZXJ0ZW5zaW9uIG1lZGljYXRpb24gdXNlIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuSHlwZXJ0ZW5zaW9uLmRydWdzX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgoKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gU0JQR3JvdXAsIGdyb3VwLmJ5ID0gIkh5cGVydGVuc2lvbi5kcnVncyIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTQlBHcm91cCkgJiAhaXMubmEoSHlwZXJ0ZW5zaW9uLmRydWdzKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTQlBHcm91cCkgJiAhaXMubmEoSHlwZXJ0ZW5zaW9uLmRydWdzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU0JQR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSAobW1IZykgYnkgbWVkaWNhdGlvbiB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJIeXBlcnRlbnNpb24uZHJ1Z3MiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEh5cGVydGVuc2lvbi5kcnVncyksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuU0JQR3JvdXBfYnlIeXBlcnRlbnNpb25EcnVncy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCwgZ3JvdXAuYnkgPSAiSHlwZXJ0ZW5zaW9uLmRydWdzIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVydGVuc2lvbi5zZWxmcmVwb3J0KSAmICFpcy5uYShIeXBlcnRlbnNpb24uZHJ1Z3MpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcnRlbnNpb24uc2VsZnJlcG9ydCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlNlbGYtcmVwb3J0ZWQgaHlwZXJ0ZW5zaW9uIHBlciBtZWRpY2F0aW9uIHVzZSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkh5cGVydGVuc2lvbi5kcnVncyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjNDlBMDFEIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gSHlwZXJ0ZW5zaW9uLmRydWdzKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5IeXBlcnRlbnNpb24uc2VsZnJlcG9ydF9ieUh5cGVydGVuc2lvbkRydWdzLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgoKCgpgYGAKCgojIyBIeXBlcmNob2xlc3Rlcm9sZW1pYSAmIExETCBsZXZlbHMKV2Ugd2FudCB0byBjcmVhdGUgZmlndXJlcyBvZiBNQ1AxIGxldmVscyBzdHJhdGlmaWVkIGJ5IGh5cGVyY2hvbGVzdGVyb2xlbWlhL0xETC1sZXZlbHMsIGFuZCB1c2Ugb2YgbGlwaWQtbG93ZXJpbmcgZHJ1Z3MuIAoKLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSBoeXBlcmNob2xlc3Rlcm9sZW1pYSAoYHJpc2s2MTRgKSBncm91cCAobm8sIHllcykKLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSBsaXBpZC1sb3dlcmluZyBkcnVncyBncm91cCAobm8sIHllcykKLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSBMREwtbGV2ZWxzIChtbW9sL0wpIGdyb3VwICg8MTAwLCAxMDAtMTI5LCAxMzAtMTU5LCAxNjAtMTg5LCAxOTArKQoKYGBge3IgTERMR3JvdXBzfQpsaWJyYXJ5KGRwbHlyKQoKQUVEQi5DRUEgPC0gQUVEQi5DRUEgJT4lIG11dGF0ZShMRExHcm91cCA9IGZhY3RvcihjYXNlX3doZW4oTERMX2ZpbmFsQ1UgPCAxMDAgfiAiPDEwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERMX2ZpbmFsQ1UgPj0gMTAwICAmIExETF9maW5hbENVIDw9IDEyOSB+ICIxMDAtMTI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRExfZmluYWxDVSA+PSAxMzAgICYgTERMX2ZpbmFsQ1UgPD0gMTU5IH4gIjEzMC0xNTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExETF9maW5hbENVID49IDE2MCAgJiBMRExfZmluYWxDVSA8PSAxODkgfiAiMTYwLTE4OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERMX2ZpbmFsQ1UgPj0gMTkwIH4gIjE5MCsiKSkpIAoKCnRhYmxlKEFFREIuQ0VBJExETEdyb3VwLCBBRURCLkNFQSRHZW5kZXIpCgpgYGAKCgpgYGB7ciBGaXggSHlwZXJjaG9sZXN0ZXJvbGVtaWF9CnJlcXVpcmUoc2psYWJlbGxlZCkKQUVEQi5DRUEkcmlzazYxNCA8LSB0b19mYWN0b3IoQUVEQi5DRUEkcmlzazYxNCkKCiMgRml4IHBsYXF1ZXBoZW5vdHlwZXMKYXR0YWNoKEFFREIuQ0VBKQpBRURCLkNFQVssIkh5cGVyY2hvbGVzdGVyb2xlbWlhIl0gPC0gTkEKQUVEQi5DRUEkSHlwZXJjaG9sZXN0ZXJvbGVtaWFbcmlzazYxNCA9PSAibWlzc2luZyB2YWx1ZSJdIDwtIE5BCkFFREIuQ0VBJEh5cGVyY2hvbGVzdGVyb2xlbWlhW3Jpc2s2MTQgPT0gLTk5OV0gPC0gTkEKQUVEQi5DRUEkSHlwZXJjaG9sZXN0ZXJvbGVtaWFbcmlzazYxNCA9PSAibm8iXSA8LSAibm8iCkFFREIuQ0VBJEh5cGVyY2hvbGVzdGVyb2xlbWlhW3Jpc2s2MTQgPT0gInllcyJdIDwtICJ5ZXMiCmRldGFjaChBRURCLkNFQSkKCnRhYmxlKEFFREIuQ0VBJHJpc2s2MTQsIEFFREIuQ0VBJEh5cGVyY2hvbGVzdGVyb2xlbWlhKQoKIyBBRURCLnRlbXAgPC0gc3Vic2V0KEFFREIsICBzZWxlY3QgPSBjKCJTVFVEWV9OVU1CRVIiLCAiVVBJRCIsICJBZ2UiLCAiR2VuZGVyIiwgIkhvc3BpdGFsIiwgIkFydGVyeV9zdW1tYXJ5IiwgInJpc2s2MTQiLCAiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiKSkKIyByZXF1aXJlKGxhYmVsbGVkKQojIEFFREIudGVtcCRHZW5kZXIgPC0gdG9fZmFjdG9yKEFFREIudGVtcCRHZW5kZXIpCiMgQUVEQi50ZW1wJEhvc3BpdGFsIDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkSG9zcGl0YWwpCiMgQUVEQi50ZW1wJEFydGVyeV9zdW1tYXJ5IDwtIHRvX2ZhY3RvcihBRURCLnRlbXAkQXJ0ZXJ5X3N1bW1hcnkpCiMgCiMgRFQ6OmRhdGF0YWJsZShBRURCLnRlbXBbMToxMCxdLCBjYXB0aW9uID0gIkV4Y2VycHQgb2YgdGhlIHdob2xlIEFFREIuIiwgcm93bmFtZXMgPSBGQUxTRSkKIyAKIyBybShBRURCLnRlbXApCgpgYGAKCk5vdyB3ZSBjYW4gZHJhdyBzb21lIGdyYXBocyBvZiBwbGFxdWUgTUNQMSBsZXZlbHMgcGVyIHNleCBhbmQgaHlwZXJjaG9sZXN0ZXJvbGVtaWEvTERMLWxldmVscyBncm91cCwgYXMgd2VsbCBhcyBzdHJhdGlmaWVkIGJ5IGxpcGlkLWxvd2VyaW5nIGRydWdzIHVzZXJzLgoKIyMjIEludmVyc2UtcmFuayB0cmFuc2Zvcm1lZCBkYXRhCgpgYGB7ciBNQ1AxIHBlciBIeXBlcmNob2xlc3Rlcm9sZW1pYSBwZXIgU2V4LCByYW5rZWR9CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBMRExHcm91cCwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKExETEdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkxETEdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJMREwgKG1nL2RMKSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkxETEdyb3VwIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuTERMR3JvdXBzLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gTERMR3JvdXAsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTERMR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJMRExHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTERMIChtZy9kTCkgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5MRExHcm91cHNfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEh5cGVyY2hvbGVzdGVyb2xlbWlhLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVyY2hvbGVzdGVyb2xlbWlhKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkRpYWdub3NlZCBoeXBlcmNob2xlc3Rlcm9sZW1pYSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJIeXBlcmNob2xlc3Rlcm9sZW1pYSIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkh5cGVyY2hvbGVzdGVyb2xlbWlhLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gSHlwZXJjaG9sZXN0ZXJvbGVtaWEsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcmNob2xlc3Rlcm9sZW1pYSkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcmNob2xlc3Rlcm9sZW1pYSIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiRGlhZ25vc2VkIGh5cGVyY2hvbGVzdGVyb2xlbWlhIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuSHlwZXJjaG9sZXN0ZXJvbGVtaWFfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gTWVkLlN0YXRpbi5MTEQsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShNZWQuU3RhdGluLkxMRCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJNZWQuU3RhdGluLkxMRCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTGlwaWQtbG93ZXJpbmcgZHJ1ZyB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiTWVkLlN0YXRpbi5MTEQiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5NZWQuU3RhdGluLkxMRC5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IE1lZC5TdGF0aW4uTExELCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiTWVkLlN0YXRpbi5MTEQiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkxpcGlkLWxvd2VyaW5nIGRydWcgdXNlIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuTWVkLlN0YXRpbi5MTERfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgoKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBMRExHcm91cCwgZ3JvdXAuYnkgPSAiTWVkLlN0YXRpbi5MTEQiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTERMR3JvdXApICYgIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkgJiAhaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJMRExHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTERMIChtZy9kTCkgcGVyIExMRCB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiTWVkLlN0YXRpbi5MTEQiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IE1lZC5TdGF0aW4uTExEKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkxETEdyb3Vwc19ieU1lZC5TdGF0aW4uTExELnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gSHlwZXJjaG9sZXN0ZXJvbGVtaWEsIGdyb3VwLmJ5ID0gIk1lZC5TdGF0aW4uTExEIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVyY2hvbGVzdGVyb2xlbWlhKSAmICFpcy5uYShNZWQuU3RhdGluLkxMRCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpICYgIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkRpYWdub3NlZCBoeXBlcmNob2xlc3Rlcm9sZW1pYSBwZXIgTExEIHVzZSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJNZWQuU3RhdGluLkxMRCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjNDlBMDFEIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gTWVkLlN0YXRpbi5MTEQpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuTERMR3JvdXBzX2J5TWVkLlN0YXRpbi5MTEQucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgpgYGAKCgojIyMgUmF3IGRhdGEKClNpbWFsYXJseSBidXQgbm93IGZvciB0aGUgcmF3IGRhdGEgYXMgbWVkaWFuIMKxIGludGVycXVhcnRpbGUgcmFuZ2UuCgpgYGB7ciBNQ1AxIHBlciBIeXBlcmNob2xlc3Rlcm9sZW1pYSBwZXIgU2V4fQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBMRExHcm91cCwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKExETEdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkxETEdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTERMIChtZy9kTCkgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSkiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJMRExHcm91cCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5MRExHcm91cHMucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gTERMR3JvdXAsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTERMR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJMRExHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkxETCAobWcvZEwpIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LkxETEdyb3Vwc19ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEh5cGVyY2hvbGVzdGVyb2xlbWlhLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVyY2hvbGVzdGVyb2xlbWlhKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJEaWFnbm9zZWQgaHlwZXJjaG9sZXN0ZXJvbGVtaWEiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuSHlwZXJjaG9sZXN0ZXJvbGVtaWEucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gSHlwZXJjaG9sZXN0ZXJvbGVtaWEsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShIeXBlcmNob2xlc3Rlcm9sZW1pYSkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJIeXBlcmNob2xlc3Rlcm9sZW1pYSIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkRpYWdub3NlZCBoeXBlcmNob2xlc3Rlcm9sZW1pYSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5IeXBlcmNob2xlc3Rlcm9sZW1pYV9ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gTWVkLlN0YXRpbi5MTEQsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShNZWQuU3RhdGluLkxMRCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJNZWQuU3RhdGluLkxMRCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkxpcGlkLWxvd2VyaW5nIGRydWcgdXNlIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIk1lZC5TdGF0aW4uTExEIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3Lk1lZC5TdGF0aW4uTExELnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IE1lZC5TdGF0aW4uTExELCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiTWVkLlN0YXRpbi5MTEQiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJMaXBpZC1sb3dlcmluZyBkcnVnIHVzZSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5NZWQuU3RhdGluLkxMRF9ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCgoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBMRExHcm91cCwgZ3JvdXAuYnkgPSAiTWVkLlN0YXRpbi5MTEQiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoTERMR3JvdXApICYgIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShMRExHcm91cCkgJiAhaXMubmEoTWVkLlN0YXRpbi5MTEQpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJMRExHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkxETCAobWcvZEwpIHBlciBMTEQgdXNlIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIk1lZC5TdGF0aW4uTExEIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiM0OUEwMUQiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBNZWQuU3RhdGluLkxMRCksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuTERMR3JvdXBzX2J5TWVkLlN0YXRpbi5MTEQucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gSHlwZXJjaG9sZXN0ZXJvbGVtaWEsIGdyb3VwLmJ5ID0gIk1lZC5TdGF0aW4uTExEIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEh5cGVyY2hvbGVzdGVyb2xlbWlhKSAmICFpcy5uYShNZWQuU3RhdGluLkxMRCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoSHlwZXJjaG9sZXN0ZXJvbGVtaWEpICYgIWlzLm5hKE1lZC5TdGF0aW4uTExEKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiSHlwZXJjaG9sZXN0ZXJvbGVtaWEiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJEaWFnbm9zZWQgaHlwZXJjaG9sZXN0ZXJvbGVtaWEgcGVyIExMRCB1c2UiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiTWVkLlN0YXRpbi5MTEQiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiIzQ5QTAxRCIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IE1lZC5TdGF0aW4uTExEKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5MRExHcm91cHNfYnlNZWQuU3RhdGluLkxMRC5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKYGBgCgoKCiMjIEtpZG5leSBmdW5jdGlvbiAoZUdGUikKV2Ugd2FudCB0byBjcmVhdGUgZmlndXJlcyBvZiBNQ1AxIGxldmVscyBzdHJhdGlmaWVkIGJ5IGtpZG5leSBmdW5jdGlvbi4gCgotIEJveCBhbmQgV2hpc2tlciBwbG90IGZvciBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGJ5IGNocm9uaWMga2lkbmV5IGRpc2Vhc2UgKENLRCkgZ3JvdXAgKDEsIDIsIDMsIDQsIDUpCi0gQm94IGFuZCBXaGlza2VyIHBsb3QgZm9yIE1DUC0xIHBsYXF1ZSBsZXZlbHMgYnkgZUdGUiAoTURSRC1iYXNlZCkgZ3JvdXAgKDkwKywgNjAtODksIDMwLTU5LCA8MzApCgpgYGB7ciBFR0ZSfQpsaWJyYXJ5KGRwbHlyKQoKQUVEQi5DRUEgPC0gQUVEQi5DRUEgJT4lIG11dGF0ZShlR0ZSR3JvdXAgPSBmYWN0b3IoY2FzZV93aGVuKEdGUl9NRFJEIDwgMTUgfiAiPDE1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUl9NRFJEID49IDE1ICAmIEdGUl9NRFJEIDw9IDI5IH4gIjE1LTI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUl9NRFJEID49IDMwICAmIEdGUl9NRFJEIDw9IDU5IH4gIjMwLTU5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUl9NRFJEID49IDYwICAmIEdGUl9NRFJEIDw9IDg5IH4gIjYwLTg5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUl9NRFJEID49IDkwIH4gIjkwKyIpKSkKCnRhYmxlKEFFREIuQ0VBJGVHRlJHcm91cCwgQUVEQi5DRUEkR2VuZGVyKQoKdGFibGUoQUVEQi5DRUEkZUdGUkdyb3VwLCBBRURCLkNFQSRLRE9RSSkKCmBgYAoKTm93IHdlIGNhbiBkcmF3IHNvbWUgZ3JhcGhzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyBwZXIgc2V4IGFuZCBraWRuZXkgZnVuY3Rpb24gZ3JvdXAuCgojIyMgSW52ZXJzZS1yYW5rIHRyYW5zZm9ybWVkIGRhdGEKCgpgYGB7ciBNQ1AxIHBlciBFR0ZSIHBlciBTZXgsIHJhbmtlZH0KCiMgR2xvYmFsIHRlc3QKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IGVHRlJHcm91cCwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKGVHRlJHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiZUdGUkdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJlR0ZSIChtTC9taW4gcGVyIDEuNzMgbTIpIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImVHRlJHcm91cCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5FR0ZSLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gZUdGUkdyb3VwLCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShlR0ZSR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJlR0ZSR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gImVHRlIgKG1ML21pbiBwZXIgMS43MyBtMikgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5FR0ZSX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gS0RPUUksIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShLRE9RSSkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDEgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoS0RPUUkpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJLRE9RSSIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiS2lkbmV5IGZ1bmN0aW9uIChLRE9RSSkiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiS0RPUUkiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEtET1FJKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwYXIocDEgKyByb3RhdGVfeF90ZXh0KDQ1KSwgbGVnZW5kID0gInJpZ2h0IikgCnJtKHAxKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuS0RPUUkucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBLRE9RSSwgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShLRE9RSSkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDEgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoS0RPUUkpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJLRE9RSSIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiS2lkbmV5IGZ1bmN0aW9uIChLRE9RSSkgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHAxICsgcm90YXRlX3hfdGV4dCg0NSksIGxlZ2VuZCA9ICJyaWdodCIpIApybShwMSkKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLktET1FJX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gZUdGUkdyb3VwLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSAmICFpcy5uYShLRE9RSSkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDEgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSAmICFpcy5uYShLRE9RSSkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoImVHRlJHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZUdGUiAobUwvbWluIHBlciAxLjczIG0yKSBieSBLRE9RSSBncm91cCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJLRE9RSSIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHAxLCBsZWdlbmQgPSAicmlnaHQiKQpybShwMSkKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkVHRlJfS0RPUUkucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCiMjIyBSYXcgZGF0YQoKU2ltYWxhcmx5IGJ1dCBub3cgZm9yIHRoZSByYXcgZGF0YSBhcyBtZWRpYW4gwrEgaW50ZXJxdWFydGlsZSByYW5nZS4KCgpgYGB7ciBNQ1AxIHBlciBFR0ZSIHBlciBTZXh9CgojIEdsb2JhbCB0ZXN0Cgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IGVHRlJHcm91cCwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKGVHRlJHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiZUdGUkdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZUdGUiAobUwvbWluIHBlciAxLjczIG0yKSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImVHRlJHcm91cCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuRUdGUi5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBlR0ZSR3JvdXAsIGdyb3VwLmJ5ID0gIkdlbmRlciIsICBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoZUdGUkdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShlR0ZSR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJlR0ZSR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJlR0ZSIChtTC9taW4gcGVyIDEuNzMgbTIpIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuRUdGUl9ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBLRE9RSSwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEtET1FJKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpwMSA8LSBnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShLRE9RSSkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIktET1FJIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiS2lkbmV5IGZ1bmN0aW9uIChLRE9RSSkiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJLRE9RSSIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gS0RPUUkpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwMSArIHJvdGF0ZV94X3RleHQoNDUpLCBsZWdlbmQgPSAicmlnaHQiKSAKcm0ocDEpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuS0RPUUkucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gS0RPUUksIGdyb3VwLmJ5ID0gIkdlbmRlciIsICAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEtET1FJKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpwMSA8LSBnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShLRE9RSSkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIktET1FJIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiS2lkbmV5IGZ1bmN0aW9uIChLRE9RSSkgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwYXIocDEgKyByb3RhdGVfeF90ZXh0KDQ1KSwgbGVnZW5kID0gInJpZ2h0IikgCnJtKHAxKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LktET1FJX2J5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IGVHRlJHcm91cCwgIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShlR0ZSR3JvdXApICYgIWlzLm5hKEtET1FJKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpwMSA8LSBnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShlR0ZSR3JvdXApICYgIWlzLm5hKEtET1FJKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiZUdGUkdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiZUdGUiAobUwvbWluIHBlciAxLjczIG0yKSBieSBLRE9RSSBncm91cCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIktET1FJIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwYXIocDEsIGxlZ2VuZCA9ICJyaWdodCIpCnJtKHAxKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LkVHRlJfS0RPUUkucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCgojIyBCTUkKV2Ugd2FudCB0byBjcmVhdGUgZmlndXJlcyBvZiBNQ1AxIGxldmVscyBzdHJhdGlmaWVkIGJ5IEJNSS4gCgotIEJveCBhbmQgV2hpc2tlciBwbG90IGZvciBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGJ5IEJNSSBXSE8gZ3JvdXAgKHVuZGVyd2VpZ2h0LCBub3JtYWwsIG92ZXJ3ZWlnaHQsIG9iZXNlKQotIEJveCBhbmQgV2hpc2tlciBwbG90IGZvciBNQ1AtMSBwbGFxdWUgbGV2ZWxzIGJ5IEJNSSBncm91cCAoPDE4LjUsIDE4LjUtMjQuOSwgMjUsIDI5LjksIDMwLTI0LjksIDM1KykKCmBgYHtyIEJNSX0KbGlicmFyeShkcGx5cikKCkFFREIuQ0VBIDwtIEFFREIuQ0VBICU+JSBtdXRhdGUoQk1JR3JvdXAgPSBmYWN0b3IoY2FzZV93aGVuKEJNSSA8IDE4LjUgfiAiPDE4LjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNSSA+PSAxOC41ICAmIEJNSSA8IDI1IH4gIjE4LjUtMjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNSSA+PSAyNSAgJiBCTUkgPCAzMCB+ICIyNS0yOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1JID49IDMwICAmIEJNSSA8IDM1IH4gIjMwLTM1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTUkgPj0gMzUgfiAiMzUrIikpKSAKCiMgcmVxdWlyZShsYWJlbGxlZCkKIyBBRURCLkNFQSRCTUlfVVMgPC0gYXNfZmFjdG9yKEFFREIuQ0VBJEJNSV9VUykKIyBBRURCLkNFQSRCTUlfV0hPIDwtIGFzX2ZhY3RvcihBRURCLkNFQSRCTUlfV0hPKQojIHRhYmxlKEFFREIuQ0VBJEJNSV9XSE8sIEFFREIuQ0VBJEJNSV9VUykKCnRhYmxlKEFFREIuQ0VBJEJNSUdyb3VwLCBBRURCLkNFQSRHZW5kZXIpCnRhYmxlKEFFREIuQ0VBJEJNSUdyb3VwLCBBRURCLkNFQSRCTUlfV0hPKQoKYGBgCgpOb3cgd2UgY2FuIGRyYXcgc29tZSBncmFwaHMgb2YgcGxhcXVlIE1DUDEgbGV2ZWxzIHBlciBzZXggYW5kIGFnZSBncm91cC4KCiMjIyBJbnZlcnNlLXJhbmsgdHJhbnNmb3JtZWQgZGF0YQoKIyMjIyBNQ1AxIHBsYXF1ZSBsZXZlbHMKCmBgYHtyIE1DUDEgcGVyIEJNSSBwZXIgU2V4LCByYW5rZWR9CgojIEdsb2JhbCB0ZXN0CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBCTUlHcm91cCwgIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShCTUlHcm91cCkpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoQk1JR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJCTUlHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiQk1JIGdyb3VwcyAoa2cvbTIpIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgICMgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgIyBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkJNSUdyb3VwIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkJNSS5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEJNSUdyb3VwLCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoQk1JR3JvdXApKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEJNSUdyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiQk1JR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkJNSSBncm91cHMgKGtnL20yKSBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkJNSV9ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTVfcmFuayB+IEJNSUdyb3VwLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoQk1JR3JvdXApICYgIWlzLm5hKEJNSV9XSE8pKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnAxIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEJNSUdyb3VwKSAmICFpcy5uYShCTUlfV0hPKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiQk1JR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkJNSSBncm91cHMgKGtnL20yKSBwZXIgV0hPIGNhdGVnb3JpZXMiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiQk1JX1dITyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHAxLCBsZWdlbmQgPSAicmlnaHQiKQpybShwMSkKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkJNSV9ieVdITy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKYGBgCgoKIyMjIFJhdyBkYXRhCgpTaW1hbGFybHkgYnV0IG5vdyBmb3IgdGhlIHJhdyBkYXRhIGFzIG1lZGlhbiDCsSBpbnRlcnF1YXJ0aWxlIHJhbmdlLgoKCmBgYHtyIE1DUDEgcGVyIEJNSSBwZXIgU2V4fQoKIyBHbG9iYWwgdGVzdApjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEJNSUdyb3VwLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEJNSUdyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShCTUlHcm91cCkpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkJNSUdyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiQk1JIGdyb3VwcyAoa2cvbTIpIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgIyBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAjIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiQk1JR3JvdXAiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuQk1JLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEJNSUdyb3VwLCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoQk1JR3JvdXApKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEJNSUdyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiQk1JR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJCTUkgZ3JvdXBzIChrZy9tMikgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5CTUlfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gQk1JR3JvdXAsICBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoQk1JR3JvdXApICYgIWlzLm5hKEJNSV9XSE8pKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnAxIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKEJNSUdyb3VwKSAmICFpcy5uYShCTUlfV0hPKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiQk1JR3JvdXAiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJCTUkgZ3JvdXBzIChrZy9tMikgcGVyIFdITyBjYXRlZ29yaWVzIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiQk1JX1dITyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHAxLCBsZWdlbmQgPSAicmlnaHQiKQpybShwMSkKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5CTUlfYnlXSE8ucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCiMjIERpYWJldGVzCldlIHdhbnQgdG8gY3JlYXRlIGZpZ3VyZXMgb2YgTUNQMSBsZXZlbHMgc3RyYXRpZmllZCBieSB0eXBlIDIgZGlhYmV0ZXMuIAoKLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSB0eXBlIDIgZGlhYmV0ZXMgZ3JvdXAgKG5vLCB5ZXMpCgpOb3cgd2UgY2FuIGRyYXcgc29tZSBncmFwaHMgb2YgcGxhcXVlIE1DUDEgbGV2ZWxzIHBlciBzZXggYW5kIGFnZSBncm91cC4KCiMjIyBJbnZlcnNlLXJhbmsgdHJhbnNmb3JtZWQgZGF0YQoKYGBge3IgTUNQMSBwZXIgRGlhYmV0ZXMgcGVyIFNleCwgcmFua2VkfQoKIyBHbG9iYWwgdGVzdApjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gRGlhYmV0ZXNTdGF0dXMsICBkYXRhID0gQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoRGlhYmV0ZXNTdGF0dXMpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKERpYWJldGVzU3RhdHVzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiRGlhYmV0ZXNTdGF0dXMiKSwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIkRpYWJldGVzIHN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICAjIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICMgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJEaWFiZXRlc1N0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLkRpYWJldGVzLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gRGlhYmV0ZXNTdGF0dXMsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShEaWFiZXRlc1N0YXR1cykpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoRGlhYmV0ZXNTdGF0dXMpKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJEaWFiZXRlc1N0YXR1cyIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiRGlhYmV0ZXMgc3RhdHVzIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24pIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuRGlhYmV0ZXNfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCiMjIyBSYXcgZGF0YQoKU2ltYWxhcmx5IGJ1dCBub3cgZm9yIHRoZSByYXcgZGF0YSBhcyBtZWRpYW4gwrEgaW50ZXJxdWFydGlsZSByYW5nZS4KCgpgYGB7ciBNQ1AxIHBlciBEaWFiZXRlcyBwZXIgU2V4fQoKIyBHbG9iYWwgdGVzdApjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IERpYWJldGVzU3RhdHVzLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKERpYWJldGVzU3RhdHVzKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShEaWFiZXRlc1N0YXR1cykpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkRpYWJldGVzU3RhdHVzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiRGlhYmV0ZXMgc3RhdHVzIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgIyBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAjIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiRGlhYmV0ZXNTdGF0dXMiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9IGMoIm1lZGlhbl9pcXIiLCAiaml0dGVyIikpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5EaWFiZXRlcy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBEaWFiZXRlc1N0YXR1cywgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKERpYWJldGVzU3RhdHVzKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShEaWFiZXRlc1N0YXR1cykpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIkRpYWJldGVzU3RhdHVzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiRGlhYmV0ZXMgc3RhdHVzIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9IGMoIm1lZGlhbl9pcXIiLCAiaml0dGVyIikpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5EaWFiZXRlc19ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCmBgYAoKCgojIyBTbW9raW5nCldlIHdhbnQgdG8gY3JlYXRlIGZpZ3VyZXMgb2YgTUNQMSBsZXZlbHMgc3RyYXRpZmllZCBieSBzbW9raW5nLiAKCi0gQm94IGFuZCBXaGlza2VyIHBsb3QgZm9yIE1DUC0xIHBsYXF1ZSBsZXZlbHMgYnkgc21va2luZyBncm91cCAobmV2ZXIsIGV4LCBjdXJyZW50KQoKTm93IHdlIGNhbiBkcmF3IHNvbWUgZ3JhcGhzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyBwZXIgc2V4IGFuZCBhZ2UgZ3JvdXAuCgojIyMgSW52ZXJzZS1yYW5rIHRyYW5zZm9ybWVkIGRhdGEKCmBgYHtyIE1DUDEgcGVyIFNtb2tpbmcgcGVyIFNleCwgcmFua2VkfQoKIyBHbG9iYWwgdGVzdApjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gU21va2VyU3RhdHVzLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNtb2tlclN0YXR1cykpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoU21va2VyU3RhdHVzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU21va2VyU3RhdHVzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTbW9rZXIgc3RhdHVzIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgICMgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgIyBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIlNtb2tlclN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLlNtb2tpbmcucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBTbW9rZXJTdGF0dXMsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTbW9rZXJTdGF0dXMpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNtb2tlclN0YXR1cykpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIlNtb2tlclN0YXR1cyIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU21va2VyIHN0YXR1cyBwZXIgZ2VuZGVyIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLlNtb2tpbmdfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCiMjIyBSYXcgZGF0YQoKU2ltYWxhcmx5IGJ1dCBub3cgZm9yIHRoZSByYXcgZGF0YSBhcyBtZWRpYW4gwrEgaW50ZXJxdWFydGlsZSByYW5nZS4KCgpgYGB7ciBNQ1AxIHBlciBTbW9raW5nIHBlciBTZXh9CgojIEdsb2JhbCB0ZXN0CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gU21va2VyU3RhdHVzLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNtb2tlclN0YXR1cykpLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEgJT4lIGZpbHRlcighaXMubmEoU21va2VyU3RhdHVzKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU21va2VyU3RhdHVzIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU21va2VyIHN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgICMgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgIyBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIlNtb2tlclN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgYWRkID0gYygibWVkaWFuX2lxciIsICJqaXR0ZXIiKSkgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LlNtb2tpbmcucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1IH4gU21va2VyU3RhdHVzLCBncm91cC5ieSA9IkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTbW9rZXJTdGF0dXMpKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFNtb2tlclN0YXR1cykpLCAKICAgICAgICAgICAgICAgICAgeCA9IGMoIlNtb2tlclN0YXR1cyIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlNtb2tlciBzdGF0dXMgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gYygibWVkaWFuX2lxciIsICJqaXR0ZXIiKSkgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LlNtb2tpbmdfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCgojIyBTdGVub3NpcwpXZSB3YW50IHRvIGNyZWF0ZSBmaWd1cmVzIG9mIE1DUDEgbGV2ZWxzIHN0cmF0aWZpZWQgYnkgc3Rlbm9zaXMgZ3JhZGUuIAoKLSBCb3ggYW5kIFdoaXNrZXIgcGxvdCBmb3IgTUNQLTEgcGxhcXVlIGxldmVscyBieSBzdGVub3NpcyBncmFkZSBncm91cCAoPDcwLCA3MC04OSwgOTArKQoKYGBge3IgU3Rlbm9zaXN9CmxpYnJhcnkoZHBseXIpCgpBRURCLkNFQSA8LSBBRURCLkNFQSAlPiUgbXV0YXRlKFN0ZW5vdGljR3JvdXAgPSBmYWN0b3IoY2FzZV93aGVuKHN0ZW5vc2UgPT0gIjAtNDklIiB+ICI8NzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW5vc2UgPT0gIjAtNDklIiB+ICI8NzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW5vc2UgPT0gIjUwLTcwJSIgfiAiPDcwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVub3NlID09ICI3MC05MCUiIH4gIjcwLTg5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVub3NlID09ICI1MC05OSUiIH4gIjkwKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rlbm9zZSA9PSAiNzAtOTklIiB+ICI5MCsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW5vc2UgPT0gIjEwMCUgKE9jY2x1c2lvbikiIH4gIjkwKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rlbm9zZSA9PSAiOTAtOTklIiB+ICI5MCsiKSkpCgp0YWJsZShBRURCLkNFQSRTdGVub3RpY0dyb3VwLCBBRURCLkNFQSRHZW5kZXIpCnRhYmxlKEFFREIuQ0VBJHN0ZW5vc2UsIEFFREIuQ0VBJFN0ZW5vdGljR3JvdXApCgpgYGAKCk5vdyB3ZSBjYW4gZHJhdyBzb21lIGdyYXBocyBvZiBwbGFxdWUgTUNQMSBsZXZlbHMgcGVyIHNleCBhbmQgYWdlIGdyb3VwLgoKIyMjIEludmVyc2UtcmFuayB0cmFuc2Zvcm1lZCBkYXRhCgpgYGB7ciBNQ1AxIHBlciBTdGVub3NpcyBwZXIgU2V4LCByYW5rZWR9CgojIEdsb2JhbCB0ZXN0CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBTdGVub3RpY0dyb3VwLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFN0ZW5vdGljR3JvdXApKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFN0ZW5vdGljR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJTdGVub3RpY0dyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTdGVub3RpYyBncmFkZSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICAjIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICMgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJTdGVub3RpY0dyb3VwIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuU3Rlbm9zaXMucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBTdGVub3RpY0dyb3VwLCBncm91cC5ieSA9IkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTdGVub3RpY0dyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTdGVub3RpY0dyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU3Rlbm90aWNHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU3Rlbm90aWMgZ3JhZGUgcGVyIGdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbikiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5TdGVub3Npc19ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKYGBgCgoKIyMjIFJhdyBkYXRhCgpTaW1hbGFybHkgYnV0IG5vdyBmb3IgdGhlIHJhdyBkYXRhIGFzIG1lZGlhbiDCsSBpbnRlcnF1YXJ0aWxlIHJhbmdlLgoKYGBge3IgTUNQMSBwZXIgU3Rlbm9zaXMgcGVyIFNleH0KCiMgR2xvYmFsIHRlc3QKY29tcGFyZV9tZWFucyhNQ1AxX3BnX21sXzIwMTUgfiBTdGVub3RpY0dyb3VwLCAgZGF0YSA9IEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFN0ZW5vdGljR3JvdXApKSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBICU+JSBmaWx0ZXIoIWlzLm5hKFN0ZW5vdGljR3JvdXApKSwgCiAgICAgICAgICAgICAgICAgIHggPSBjKCJTdGVub3RpY0dyb3VwIiksCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1IiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU3Rlbm90aWMgZ3JhZGUiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICAjIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgICMgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJTdGVub3RpY0dyb3VwIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUucmF3LlN0ZW5vc2lzLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IFN0ZW5vdGljR3JvdXAsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTdGVub3RpY0dyb3VwKSksIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSAlPiUgZmlsdGVyKCFpcy5uYShTdGVub3RpY0dyb3VwKSksIAogICAgICAgICAgICAgICAgICB4ID0gYygiU3Rlbm90aWNHcm91cCIpLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlN0ZW5vdGljIGdyYWRlIHBlciBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuU3Rlbm9zaXNfYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmBgYAoKCiMjIFBsYXF1ZSB2cy4gcGxhcXVlIE1DUDEgbGV2ZWxzCldlIHdpbGwgYWxzbyBtYWtlIGEgbmljZSBjb3JyZWxhdGlvbiBwbG90IGJldHdlZW4gdGhlIHR3byBleHBlcmltZW50cyBvZiBwbGFxdWUgTUNQMSBsZXZlbHMuIAoKYGBge3IgTUNQMSBjb3JyZWxhdGlvbnMsIHBsYXF1ZSB2cy4gcGxhcXVlfQpBRURCLkNFQSRNQ1AxX3JhbmsgPC0gcW5vcm0oKHJhbmsoQUVEQi5DRUEkTUNQMSwgbmEubGFzdCA9ICJrZWVwIikgLSAwLjUpIC8gc3VtKCFpcy5uYShBRURCLkNFQSRNQ1AxKSkpCnN1bW1hcnkoQUVEQi5DRUEkTUNQMSkKc3VtbWFyeShBRURCLkNFQSRNQ1AxX3BnX3VnXzIwMTUpCgpnZ3B1YnI6Omdnc2NhdHRlcihBRURCLkNFQSwgCiAgICAgICAgICAgICAgICAgIHggPSAiTUNQMSIsIAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNSIsCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSAoZXhwLiBuby4gMSkiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF0gKGV4cC4gbm8uIDIpIiwKICAgICAgICAgICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgYWRkLnBhcmFtcyA9IGxpc3QoY29sb3IgPSAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBjb25mLmludCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgIGNvci5jb2VmID0gVFJVRSwgY29yLmNvZWZmLmFyZ3MgPSBsaXN0KG1ldGhvZCA9ICJzcGVhcm1hbiIpKQpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWVfdnNfcGxhcXVlLnJhdy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKZ2dwdWJyOjpnZ3NjYXR0ZXIoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gIk1DUDFfcmFuayIsIAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIChleHAuIG5vLiAxKSIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSAoZXhwLiBuby4gMikiLAogICAgICAgICAgICAgICAgICBhZGQgPSAicmVnLmxpbmUiLCBhZGQucGFyYW1zID0gbGlzdChjb2xvciA9ICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGNvbmYuaW50ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IuY29lZmYuYXJncyA9IGxpc3QobWV0aG9kID0gInNwZWFybWFuIikpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZV92c19wbGFxdWUucmFuay5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCmBgYAoKCiMjIFN5bXB0b21zCldlIHdhbnQgdG8gY3JlYXRlIHBlci1zeW1wdG9tIGZpZ3VyZXMuIAoKYGBge3IgU3ltcHRvbUdyb3Vwc30KbGlicmFyeShkcGx5cikKCnRhYmxlKEFFREIuQ0VBJEFnZUdyb3VwLCBBRURCLkNFQSRBc3ltcHRTeW1wdDJHKQp0YWJsZShBRURCLkNFQSRHZW5kZXIsIEFFREIuQ0VBJEFzeW1wdFN5bXB0MkcpCnRhYmxlKEFFREIuQ0VBJEFzeW1wdFN5bXB0MkcpCgpgYGAKCiMjIyBJbnZlcnNlLXJhbmsgdHJhbnNmb3JtZWQgZGF0YQoKTm93IHdlIGNhbiBkcmF3IHNvbWUgZ3JhcGhzIG9mIHBsYXF1ZSBNQ1AxIGxldmVscyBwZXIgc3ltcHRvbSBncm91cC4KYGBge3IgTUNQMSBwZXIgU3ltcHRvbUdyb3VwcywgcmFua2VkfQoKIyA/Z2dwdWJyOjpnZ2JveHBsb3QoKQpteV9jb21wYXJpc29ucyA8LSBsaXN0KGMoIkFzeW1wdG9tYXRpYyIsICJTeW1wdG9tYXRpYyIpKQoKcDEgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gIkFzeW1wdFN5bXB0MkciLCB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwKICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSBsZXZlbHMgcGVyIHN5bXB0b20iLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTeW1wdG9tcyIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuIGludmVyc2UtcmFuayB0cmFuc2Zvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkFzeW1wdFN5bXB0MkciLCAKICAgICAgICAgICAgICAgICAgIyBwYWxldHRlID0gYyh1aXRob2ZfY29sb3JbMTZdLCB1aXRob2ZfY29sb3JbMjNdKSwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBhZGQgPSAiZG90cGxvdCIsICMgQWRkIGRvdHBsb3QKICAgICAgICAgICAgICAgICAgYWRkLnBhcmFtcyA9IGxpc3QoYmlud2lkdGggPSAwLjEsIGRvdHNpemUgPSAwLjMpCiAgICAgICAgICApICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoY29tcGFyaXNvbnMgPSBteV9jb21wYXJpc29ucywgbWV0aG9kID0gIndpbGNveC50ZXN0IikKZ2dwYXIocDEsIGxlZ2VuZCA9IGMoInJpZ2h0IiksIGxlZ2VuZC50aXRsZSA9ICJTeW1wdG9tcyIpCgpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuQXN5bXB0U3ltcHQyRy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKcm0ocDEpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gQXN5bXB0U3ltcHQyRywgZ3JvdXAuYnkgPSAiR2VuZGVyIiwgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDEgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gIkFzeW1wdFN5bXB0MkciLCB5ID0gIk1DUDFfcGdfbWxfMjAxNV9yYW5rIiwKICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSBsZXZlbHMgcGVyIHN5bXB0b20gYnkgZ2VuZGVyIiwgCiAgICAgICAgICAgICAgICAgIHhsYWIgPSAiU3ltcHRvbXMiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbiBpbnZlcnNlLXJhbmsgdHJhbnNmb3JtYXRpb24iLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJkb3RwbG90IiwgIyBBZGQgZG90cGxvdAogICAgICAgICAgICAgICAgICBhZGQucGFyYW1zID0gbGlzdChiaW53aWR0aCA9IDAuMSwgZG90c2l6ZSA9IDAuMykKICAgICAgICAgICkgKwogIHN0YXRfY29tcGFyZV9tZWFucyhhZXMoZ3JvdXAgPSBHZW5kZXIpLCBsYWJlbCA9ICJwLmZvcm1hdCIsICBtZXRob2QgPSAid2lsY294LnRlc3QiKQpnZ3BhcihwMSwgbGVnZW5kID0gYygicmlnaHQiKSwgbGVnZW5kLnRpdGxlID0gIlN5bXB0b21zIikKCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5Bc3ltcHRTeW1wdDJHLmJ5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpybShwMSkKCmBgYAoKIyMjIFJhdyBkYXRhCgpTaW1hbGFybHkgYnV0IG5vdyBmb3IgdGhlIHJhdyBkYXRhIGFzIG1lZGlhbiDCsSBpbnRlcnF1YXJ0aWxlIHJhbmdlLgoKYGBge3IgTUNQMSBwZXIgU3ltcHRvbUdyb3Vwc30KCiMgP2dncHVicjo6Z2dib3hwbG90KCkKbXlfY29tcGFyaXNvbnMgPC0gbGlzdChjKCJBc3ltcHRvbWF0aWMiLCAiU3ltcHRvbWF0aWMiKSkKCnAxIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJBc3ltcHRTeW1wdDJHIiwgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLAogICAgICAgICAgICAgICAgICB0aXRsZSA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIGxldmVscyBwZXIgc3ltcHRvbSIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlN5bXB0b21zIiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiQXN5bXB0U3ltcHQyRyIsIAogICAgICAgICAgICAgICAgICAjIHBhbGV0dGUgPSBjKHVpdGhvZl9jb2xvclsxNl0sIHVpdGhvZl9jb2xvclsyM10pLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJkb3RwbG90IiwgIyBBZGQgZG90cGxvdAogICAgICAgICAgICAgICAgICBhZGQucGFyYW1zID0gbGlzdChiaW53aWR0aCA9IDAuMSwgZG90c2l6ZSA9IDAuMykKICAgICAgICAgICkgKwogIHN0YXRfY29tcGFyZV9tZWFucyhjb21wYXJpc29ucyA9IG15X2NvbXBhcmlzb25zLCBtZXRob2QgPSAid2lsY294LnRlc3QiKQpnZ3BhcihwMSwgbGVnZW5kID0gYygicmlnaHQiKSwgbGVnZW5kLnRpdGxlID0gIlN5bXB0b21zIikKCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5yYXcuQXN5bXB0U3ltcHQyRy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKcm0ocDEpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNSB+IEFzeW1wdFN5bXB0MkcsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnAxIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJBc3ltcHRTeW1wdDJHIiwgeSA9ICJNQ1AxX3BnX21sXzIwMTUiLAogICAgICAgICAgICAgICAgICB0aXRsZSA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdIGxldmVscyBwZXIgc3ltcHRvbSBieSBnZW5kZXIiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJTeW1wdG9tcyIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImRvdHBsb3QiLCAjIEFkZCBkb3RwbG90CiAgICAgICAgICAgICAgICAgIGFkZC5wYXJhbXMgPSBsaXN0KGJpbndpZHRoID0gMC4xLCBkb3RzaXplID0gMC4zKQogICAgICAgICAgKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJ3aWxjb3gudGVzdCIpCmdncGFyKHAxLCBsZWdlbmQgPSBjKCJyaWdodCIpLCBsZWdlbmQudGl0bGUgPSAiU3ltcHRvbXMiKQoKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLnJhdy5Bc3ltcHRTeW1wdDJHLmJ5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpybShwMSkKCmBgYAoKIyMgRm9yZXN0IHBsb3RzCgpXZSB3b3VsZCBhbHNvIGxpa2UgdG8gdmlzdWFsaXplIHRoZSBtdWx0aXZhcmlhYmxlIGFuYWx5c2VzIHJlc3VsdHMuCmBgYHtyIGxvYWQgbW9kZWwgZGF0YX0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KG9wZW54bHN4KQptb2RlbDFfbWNwMSA8LSByZWFkLnhsc3gocGFzdGUwKE9VVF9sb2MsICIvIiwgVG9kYXksICIuQUVEQi5DRUEuQmluLlVuaS5Qcm90ZWluLlJBTksuU3ltcHRvbXMuTU9ERUwxLnhsc3giKSkKbW9kZWwyX21jcDEgPC0gcmVhZC54bHN4KHBhc3RlMChPVVRfbG9jLCAiLyIsIFRvZGF5LCAiLkFFREIuQ0VBLkJpbi5NdWx0aS5Qcm90ZWluLlJBTksuU3ltcHRvbXMuTU9ERUwyLnhsc3giKSkKbW9kZWwxX21jcDEkbW9kZWwgPC0gInVuaXZhcmlhdGUiCm1vZGVsMl9tY3AxJG1vZGVsIDwtICJtdWx0aXZhcmlhdGUiCgptb2RlbHNfbWNwMSA8LSByYmluZChtb2RlbDFfbWNwMSwgbW9kZWwyX21jcDEpCm1vZGVsc19tY3AxCgpgYGAKCkZvcmVzdCBwbG90IGZvciBleHBlcmltZW50IDIuCgpgYGB7ciBmb3Jlc3RwbG90IHBsYXF1ZSwgZXhwZXJpbWVudCAyfQpkYXQgPC0gZGF0YS5mcmFtZShncm91cCA9IGZhY3RvcihjKCJBZ2UsIHNleC1hZGp1c3RlZCIsICJBZ2UsIHNleCwgYW5kIGFkanVzdGVkIGZvciByaXNrIGZhY3RvcnMiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHM9YygiQWdlLCBzZXgsIGFuZCBhZGp1c3RlZCBmb3IgcmlzayBmYWN0b3JzIiwgIkFnZSwgc2V4LWFkanVzdGVkIikpLAogICAgICAgICAgICAgICAgICBjZW4gPSBjKG1vZGVsc19tY3AxJE9SW21vZGVsc19tY3AxJFByZWRpY3Rvcj09Ik1DUDFfcGdfbWxfMjAxNV9yYW5rIl0pLAogICAgICAgICAgICAgICAgICBsb3cgPSBjKG1vZGVsc19tY3AxJGxvdzk1Q0lbbW9kZWxzX21jcDEkUHJlZGljdG9yPT0iTUNQMV9wZ19tbF8yMDE1X3JhbmsiXSksCiAgICAgICAgICAgICAgICAgIGhpZ2ggPSBjKG1vZGVsc19tY3AxJHVwOTVDSVttb2RlbHNfbWNwMSRQcmVkaWN0b3I9PSJNQ1AxX3BnX21sXzIwMTVfcmFuayJdKSkKCmZwIDwtIGdncGxvdChkYXRhID0gZGF0LCBhZXMoeCA9IGdyb3VwLCB5ID0gY2VuLCB5bWluID0gbG93LCB5bWF4ID0gaGlnaCkpICsKICBnZW9tX3BvaW50cmFuZ2UobGluZXR5cGUgPSAyLCBzaXplID0gMSwgY29sb3VyID0gYygiIzEyOTBEOSIsICIjNDlBMDFEIikpICsgCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSwgbHR5ID0gMikgKyAgIyBhZGQgYSBkb3R0ZWQgbGluZSBhdCB4PTEgYWZ0ZXIgZmxpcAogIGNvb3JkX2ZsaXAoeWxpbSA9IGMoMC44LCAxLjcpKSArICAjIGZsaXAgY29vcmRpbmF0ZXMgKHB1dHMgbGFiZWxzIG9uIHkgYXhpcykKICB4bGFiKCJNb2RlbCIpICsgeWxhYigiT1IgKDk1JSBDSSkgZm9yIHN5bXB0b21hdGljIHBsYXF1ZXMiKSArCiAgZ2d0aXRsZSgiUGxhcXVlIE1DUC0xIGxldmVscyAoMSBTRCBpbmNyZW1lbnQsIGV4cC4gIzIsIG4gPSAxMTkwKykiKSArCiAgdGhlbWVfbWluaW1hbCgpICAjIHVzZSBhIHdoaXRlIGJhY2tncm91bmQKcHJpbnQoZnApCgpnZ3NhdmUoZmlsZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuTUNQMS5wbGFxdWUuZXhwMi5mb3Jlc3QucGRmIiksIHBsb3QgPSBmcCkKCnJtKGZwKQpgYGAKCkZvcmVzdCBwbG90IGZvciBleHBlcmltZW50IDEuCgpgYGB7ciBmb3Jlc3RwbG90IHBsYXF1ZSwgZXhwZXJpbWVudCAxfQpkYXQgPC0gZGF0YS5mcmFtZShncm91cCA9IGZhY3RvcihjKCJBZ2UsIHNleC1hZGp1c3RlZCIsICJBZ2UsIHNleCwgYW5kIGFkanVzdGVkIGZvciByaXNrIGZhY3RvcnMiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHM9YygiQWdlLCBzZXgsIGFuZCBhZGp1c3RlZCBmb3IgcmlzayBmYWN0b3JzIiwgIkFnZSwgc2V4LWFkanVzdGVkIikpLAogICAgICAgICAgICAgICAgICBjZW4gPSBjKG1vZGVsc19tY3AxJE9SW21vZGVsc19tY3AxJFByZWRpY3Rvcj09Ik1DUDFfcmFuayJdKSwKICAgICAgICAgICAgICAgICAgbG93ID0gYyhtb2RlbHNfbWNwMSRsb3c5NUNJW21vZGVsc19tY3AxJFByZWRpY3Rvcj09Ik1DUDFfcmFuayJdKSwKICAgICAgICAgICAgICAgICAgaGlnaCA9IGMobW9kZWxzX21jcDEkdXA5NUNJW21vZGVsc19tY3AxJFByZWRpY3Rvcj09Ik1DUDFfcmFuayJdKSkKCmZwIDwtIGdncGxvdChkYXRhID0gZGF0LCBhZXMoeCA9IGdyb3VwLCB5ID0gY2VuLCB5bWluID0gbG93LCB5bWF4ID0gaGlnaCkpICsKICBnZW9tX3BvaW50cmFuZ2UobGluZXR5cGUgPSAyLCBzaXplID0gMSwgY29sb3VyID0gYygiIzEyOTBEOSIsICIjNDlBMDFEIikpICsgCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMSwgbHR5ID0gMikgKyAgIyBhZGQgYSBkb3R0ZWQgbGluZSBhdCB4PTEgYWZ0ZXIgZmxpcAogIGNvb3JkX2ZsaXAoeWxpbSA9IGMoMC44LCAxLjcpKSArICAjIGZsaXAgY29vcmRpbmF0ZXMgKHB1dHMgbGFiZWxzIG9uIHkgYXhpcykKICB4bGFiKCJNb2RlbCIpICsgeWxhYigiT1IgKDk1JSBDSSkgZm9yIHN5bXB0b21hdGljIHBsYXF1ZXMiKSArCiAgZ2d0aXRsZSgiUGxhcXVlIE1DUC0xIGxldmVscyAoMSBTRCBpbmNyZW1lbnQsIGV4cC4gIzEsIG4gPSA0OTArKSIpICsKICB0aGVtZV9taW5pbWFsKCkgICMgdXNlIGEgd2hpdGUgYmFja2dyb3VuZApwcmludChmcCkKCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5leHAxLmZvcmVzdC5wZGYiKSwgcGxvdCA9IGZwKQoKcm0oZnApCmBgYAoKIyMgTUNQMSB2cy4gY3l0b2tpbmVzIHBsYXF1ZSBsZXZlbHMgY29ycmVsYXRpb25zCgpXZSB3aWxsIHBsb3QgdGhlIGNvcnJlbGF0aW9ucyBvZiBvdGhlciBjeXRva2luZSBwbGFxdWUgbGV2ZWxzIHRvIHRoZSBNQ1AxIHBsYXF1ZSBsZXZlbHMuIFRoZXNlIGluY2x1ZGU6CgotIElMMgotIElMNAotIElMNQotIElMNgotIElMOAotIElMOQotIElMMTAKLSBJTDEyCi0gSUwxMwotIElMMjEKLSBJTkZHCi0gVE5GQQotIE1JRgotIE1DUDEKLSBNSVAxYQotIFJBTlRFUwotIE1JRwotIElQMTAKLSBFb3RheGluMQotIFRBUkMKLSBQQVJDCi0gTURDCi0gT1BHCi0gc0lDQU0xCi0gVkVHRkEKLSBUR0ZCCgpJbiBhZGRpdGlvbiB3ZSB3aWxsIGxvb2sgYXQgdGhyZWUgbWV0YWxsb3Byb3RlaW5hc2VzIHdoaWNoIHdlcmUgbWVhc3VyZWQgdXNpbmcgYW4gYWN0aXZpdHkgYXNzYXkuIAoKLSBNTVAyCi0gTU1QOAotIE1NUDkKClRoZSBwcm90ZWlucyB3ZXJlIG1lYXN1cmVkIHVzaW5nIEZBQ1MgYW5kIExVTUlORVguIEdpdmVuIHRoZSBkaWZmZXJlbnQgcGxhdGZvcm1zIHVzZWQgKEZBQ1MgdnMuIExVTUlORVgpLCB3ZSB3aWxsIGludmVyc2UgcmFuay1ub3JtYWxpemUgdGhlc2UgdmFyaWFibGVzIGFzIHdlbGwgdG8gc2NhbGUgdGhlbSB0byB0aGUgc2FtZSBzY2FsZSBhcyB0aGUgTUNQMSBwbGFxdWUgbGV2ZWxzLgoKCldlIHdpbGwgc2V0IHRoZSBtZWFzdXJlbWVudHMgdGhhdCB5aWVsZGVkICcwJyB0byBOQSwgYXMgaXQgaXMgdW5saWtlbHkgdGhhdCBhbnkgcHJvdGVpbiBldmVyIGhhcyBleGFjdGx5IDAgY29waWVzLiBUaGUgJzAnIHlpZWxkZWQgZHVyaW5nIHRoZSBleHBlcmltZW50IGFyZSBkdWUgdG8gdGhlIGxpbWl0cyBvZiB0aGUgZGV0ZWN0aW9uLgoKIyMjIFByZXBhcmUgZGF0YQpgYGB7ciBNQ1AxIHZzIEN5dG9raW5lcyBJTlJUfQpjeXRva2luZXMgPC0gYygiSUwyIiwgIklMNCIsICJJTDUiLCAiSUw2IiwgIklMOCIsICJJTDkiLCAiSUwxMCIsICJJTDEyIiwgIklMMTMiLCAiSUwyMSIsIAogICAgICAgICAgICAgICAiSU5GRyIsICJUTkZBIiwgIk1JRiIsICJNQ1AxIiwgIk1JUDFhIiwgIlJBTlRFUyIsICJNSUciLCAiSVAxMCIsICJFb3RheGluMSIsIAogICAgICAgICAgICAgICAiVEFSQyIsICJQQVJDIiwgIk1EQyIsICJPUEciLCAic0lDQU0xIiwgIlZFR0ZBIiwgIlRHRkIiKQptZXRhbGxvcHJvdGVpbmFzZXMgPC0gYygiTU1QMiIsICJNTVA4IiwgIk1NUDkiKQoKIyBmaXggbmFtZXMKbmFtZXMoQUVEQi5DRUEpW25hbWVzKEFFREIuQ0VBKSA9PSAiVkVGR0EiXSA8LSAiVkVHRkEiCgoKcHJvdGVpbnNfb2ZfaW50ZXJlc3QgPC0gYyhjeXRva2luZXMsIG1ldGFsbG9wcm90ZWluYXNlcykKCnByb3RlaW5zX29mX2ludGVyZXN0X3JhbmsgPSB1bmxpc3QobGFwcGx5KHByb3RlaW5zX29mX2ludGVyZXN0LCBwYXN0ZTAsICJfcmFuayIpKQoKCiMgbWFrZSB2YXJpYWJsZXMgbnVtZXJpY3MoKQpBRURCLkNFQSA8LSBBRURCLkNFQSAlPiUKICBtdXRhdGVfZWFjaChmdW5zKGFzLm51bWVyaWMpLCBwcm90ZWluc19vZl9pbnRlcmVzdCkKICAKZm9yKFBST1RFSU4gaW4gMTpsZW5ndGgocHJvdGVpbnNfb2ZfaW50ZXJlc3QpKXsKCiAgIyBVQ09SQklPR1NBcWMkWiA8LSBOVUxMCiAgdmFyLnRlbXAucmFuayA9IHByb3RlaW5zX29mX2ludGVyZXN0X3JhbmtbUFJPVEVJTl0KICB2YXIudGVtcCA9IHByb3RlaW5zX29mX2ludGVyZXN0W1BST1RFSU5dCiAgCiAgY2F0KHBhc3RlMCgiXG5TZWxlY3RpbmcgIiwgdmFyLnRlbXAsICIgYW5kIHN0YW5kYXJkaXNpbmc6ICIsIHZhci50ZW1wLnJhbmssIi5cbiIpKQogIGNhdChwYXN0ZTAoIiogY2hhbmdpbmcgIiwgdmFyLnRlbXAsICIgdG8gbnVtZXJpYy5cbiIpKQoKICAjIEFFREIuQ0VBIDwtICBBRURCLkNFQSAlPiUgbXV0YXRlKEFFREIuQ0VBWyx2YXIudGVtcF0gPT0gcmVwbGFjZShBRURCLkNFQVssdmFyLnRlbXBdLCBBRURCLkNFQVssdmFyLnRlbXBdPT0wLCBOQSkpCgogIEFFREIuQ0VBWyx2YXIudGVtcF1bQUVEQi5DRUFbLHZhci50ZW1wXT09MC4wMDAwMDBdPU5BCgogIGNhdChwYXN0ZTAoIiogc3RhbmRhcmRpc2luZyAiLCB2YXIudGVtcCwgCiAgICAgICAgICAgICAiIChtZWFuOiAiLHJvdW5kKG1lYW4oIWlzLm5hKEFFREIuQ0VBWyx2YXIudGVtcF0pKSwgZGlnaXRzID0gNiksCiAgICAgICAgICAgICAiLCBuID0gIixzdW0oIWlzLm5hKEFFREIuQ0VBWyx2YXIudGVtcF0pKSwiKS5cbiIpKQogIAogIEFFREIuQ0VBIDwtIEFFREIuQ0VBICU+JQogICAgICBtdXRhdGVfYXQodmFycyh2YXIudGVtcCksIAogICAgICAgICMgbGlzdChaID0gfiAoQUVEQi5DRUFbLHZhci50ZW1wXSAtIG1lYW4oQUVEQi5DRUFbLHZhci50ZW1wXSwgbmEucm0gPSBUUlVFKSkvc2QoQUVEQi5DRUFbLHZhci50ZW1wXSwgbmEucm0gPSBUUlVFKSkKICAgICAgICBsaXN0KFJBTksgPSB+IHFub3JtKChyYW5rKEFFREIuQ0VBWyx2YXIudGVtcF0sIG5hLmxhc3QgPSAia2VlcCIpIC0gMC41KSAvIHN1bSghaXMubmEoQUVEQi5DRUFbLHZhci50ZW1wXSkpKSkKICAgICAgKQogICMgc3RyKFVDT1JCSU9HU0FxYyRaKQogIGNhdChwYXN0ZTAoIiogcmVuYW1pbmcgUkFOSyB0byAiLCB2YXIudGVtcC5yYW5rLCIuXG4iKSkKICBBRURCLkNFQVssdmFyLnRlbXAucmFua10gPC0gTlVMTAogIG5hbWVzKEFFREIuQ0VBKVtuYW1lcyhBRURCLkNFQSkgPT0gIlJBTksiXSA8LSB2YXIudGVtcC5yYW5rCn0KCiMgcm0odmFyLnRlbXAsIHZhci50ZW1wLnJhbmspCgpgYGAKCiMjIyBWaXN1YWxpemUgdHJhbnNmb3JtYXRpb25zCgpXZSB3aWxsIGp1c3QgdmlzdWFsaXplIHRoZXNlIHRyYW5zZm9ybWF0aW9ucy4KCmBgYHtyIE1DUDEgdnMgQ3l0b2tpbmVzIEhpc3RvZ3JhbXN9CnByb3RlaW5zX29mX2ludGVyZXN0X3JhbmtfbWNwMSA8LSBjKCJNQ1AxX3BnX21sXzIwMTVfcmFuayIsIHByb3RlaW5zX29mX2ludGVyZXN0X3JhbmspCgpwcm90ZWluc19vZl9pbnRlcmVzdF9tY3AxIDwtIGMoIk1DUDFfcGdfbWxfMjAxNSIsIHByb3RlaW5zX29mX2ludGVyZXN0KQoKZm9yKFBST1RFSU4gaW4gcHJvdGVpbnNfb2ZfaW50ZXJlc3RfbWNwMSl7CiAgY2F0KHBhc3RlMCgiUGxvdHRpbmcgcHJvdGVpbiAiLCBQUk9URUlOLCAiLlxuIikpCiAgCiAgcDEgPC0gZ2dwdWJyOjpnZ2hpc3RvZ3JhbShBRURCLkNFQSwgUFJPVEVJTiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjMTI5MEQ5IiwgIiNEQjAwM0YiKSwKICAgICAgICAgICAgICAgICAgICBhZGQgPSAibWVhbiIsCiAgICAgICAgICAgICAgICAgICAgIyBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICMgYWRkLnBhcmFtcyA9ICBsaXN0KGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAyKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMChQUk9URUlOLCAiIHBsYXF1ZSBsZXZlbHMiKSwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gIiIsCiAgICAgICAgICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKICBwcmludChwMSkKICAKfQoKCmZvcihQUk9URUlOIGluIHByb3RlaW5zX29mX2ludGVyZXN0X3JhbmtfbWNwMSl7CiAgY2F0KHBhc3RlMCgiUGxvdHRpbmcgcHJvdGVpbiAiLCBQUk9URUlOLCAiLlxuIikpCiAgCiAgcDEgPC0gZ2dwdWJyOjpnZ2hpc3RvZ3JhbShBRURCLkNFQSwgUFJPVEVJTiwKICAgICAgICAgICAgICAgICAgICAjIHkgPSAiLi5jb3VudC4uIiwKICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjMTI5MEQ5IiwgIiNEQjAwM0YiKSwKICAgICAgICAgICAgICAgICAgICBhZGQgPSAibWVhbiIsCiAgICAgICAgICAgICAgICAgICAgIyBydWcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICMgYWRkLnBhcmFtcyA9ICBsaXN0KGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAyKSwKICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBhc3RlMChQUk9URUlOLCAiIHBsYXF1ZSBsZXZlbHMiKSwKICAgICAgICAgICAgICAgICAgICB4bGFiID0gImludmVyc2Utbm9ybWFsIHRyYW5zZm9ybWF0aW9uIiwKICAgICAgICAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQogIHByaW50KHAxKQogIAp9CiAgCmBgYAoKIyMjIENvcnJlbGF0aW9ucwoKSGVyZSB3ZSBjYWxjdWxhdGUgY29ycmVsYXRpb25zIGJldHdlZW4gYE1DUDFfcGdfdWdfMjAxNWAgYW5kIDI4IG90aGVyIGN5dG9raW5lcyAoaW5jbHVkaW5nIGBNQ1AxYCBhcyBtZWFzdXJlZCBpbiBleHBlcmltZW50IDEuIFdlIHVzZSBTcGVhcm1hbidzIHRlc3QsIHRodXMsIGNvcnJlbGF0aW9ucyBhIGdpdmVuIGluIF9yaG9fLiBQbGVhc2Ugbm90ZSB0aGUgaW5kaWNhdGlvbnMgb2YgbWVhc3VyZW1lbnQgbWV0aG9kczoKCi0gX0xfOiBMVU1JTkVYCi0gX0VfOiBFTElTQQotIF9hXzogYWN0aXZpdHkgYXNzYXkKCmBgYHtyIE1DUDEgdnMgQ3l0b2tpbmVzIGNvcnJlbGF0aW9uc30KIyBJbnN0YWxsYXRpb24gb2YgZ2djb3JycGxvdCgpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWYoIXJlcXVpcmUoZGV2dG9vbHMpKSAKICBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpCmRldnRvb2xzOjppbnN0YWxsX2dpdGh1Yigia2Fzc2FtYmFyYS9nZ2NvcnJwbG90IikKCmxpYnJhcnkoZ2djb3JycGxvdCkKCiMgQ3JlYXRpbmcgbWF0cml4IC0gaW52ZXJzZS1yYW5rIHRyYW5zZm9ybWF0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQUVEQi5DRUEudGVtcCA8LSBzdWJzZXQoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IGMocHJvdGVpbnNfb2ZfaW50ZXJlc3RfcmFua19tY3AxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCgojIHN0cihBRURCLkNFQS50ZW1wKQpBRURCLkNFQS5tYXRyaXguUkFOSyA8LSBhcy5tYXRyaXgoQUVEQi5DRUEudGVtcCkKcm0oQUVEQi5DRUEudGVtcCkKCmNvcnJfYmlvbWFya2Vycy5yYW5rIDwtIHJvdW5kKGNvcihBRURCLkNFQS5tYXRyaXguUkFOSywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIsICN0aGUgY29ycmVsYXRpb24gb3IgY292YXJpYW5jZSBiZXR3ZWVuIGVhY2ggcGFpciBvZiB2YXJpYWJsZXMgaXMgY29tcHV0ZWQgdXNpbmcgYWxsIGNvbXBsZXRlIHBhaXJzIG9mIG9ic2VydmF0aW9ucyBvbiB0aG9zZSB2YXJpYWJsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3BlYXJtYW4iKSwgMykKIyBjb3JyX2Jpb21hcmtlcnMucmFuawoKcmVuYW1lX3Byb3RlaW5zX29mX2ludGVyZXN0X21jcDEgPC0gYygiTUNQMSAoTCwgZXhwMiwgcGcvbUwpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTDIiLCAiSUw0IiwgIklMNSIsICJJTDYiLCAiSUw4IiwgIklMOSIsICJJTDEwIiwgIklMMTIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklMMTMgKEwpIiwgIklMMjEgKEwpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTkZHIiwgIlRORkEiLCAiTUlGIChMKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUNQMSAoTCwgZXhwMSkiLCAiTUlQMWEgKEwpIiwgIlJBTlRFUyAoTCkiLCAiTUlHIChMKSIsICJJUDEwIChMKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW90YXhpbjEgKEwpIiwgIlRBUkMgKEwpIiwgIlBBUkMgKEwpIiwgIk1EQyAoTCkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QRyAoTCkiLCAic0lDQU0xIChMKSIsICJWRUdGQSAoRSkiLCAiVEdGQiAoRSkiLCAiTU1QMiAoYSkiLCAiTU1QOCAoYSkiLCAiTU1QOSAoYSkiKQpjb2xuYW1lcyhjb3JyX2Jpb21hcmtlcnMucmFuaykgPC0gYyhyZW5hbWVfcHJvdGVpbnNfb2ZfaW50ZXJlc3RfbWNwMSkKcm93bmFtZXMoY29ycl9iaW9tYXJrZXJzLnJhbmspIDwtIGMocmVuYW1lX3Byb3RlaW5zX29mX2ludGVyZXN0X21jcDEpCgpjb3JyX2Jpb21hcmtlcnNfcC5yYW5rIDwtIGdnY29ycnBsb3Q6OmNvcl9wbWF0KEFFREIuQ0VBLm1hdHJpeC5SQU5LLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiwgbWV0aG9kID0gInNwZWFybWFuIikKCiMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwojIGZsYXR0ZW5Db3JyTWF0cml4CiMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwojIGNvcm1hdCA6IG1hdHJpeCBvZiB0aGUgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCiMgcG1hdCA6IG1hdHJpeCBvZiB0aGUgY29ycmVsYXRpb24gcC12YWx1ZXMKZmxhdHRlbkNvcnJNYXRyaXggPC0gZnVuY3Rpb24oY29ybWF0LCBwbWF0KSB7CiAgdXQgPC0gdXBwZXIudHJpKGNvcm1hdCkKICBkYXRhLmZyYW1lKAogICAgcm93ID0gcm93bmFtZXMoY29ybWF0KVtyb3coY29ybWF0KVt1dF1dLAogICAgY29sdW1uID0gcm93bmFtZXMoY29ybWF0KVtjb2woY29ybWF0KVt1dF1dLAogICAgY29yICA9KGNvcm1hdClbdXRdLAogICAgcCA9IHBtYXRbdXRdCiAgICApCn0KCmNvcnJfYmlvbWFya2Vycy5yYW5rLmRmIDwtIGZsYXR0ZW5Db3JyTWF0cml4KGNvcnJfYmlvbWFya2Vycy5yYW5rLCBjb3JyX2Jpb21hcmtlcnNfcC5yYW5rKQoKCm5hbWVzKGNvcnJfYmlvbWFya2Vycy5yYW5rLmRmKVtuYW1lcyhjb3JyX2Jpb21hcmtlcnMucmFuay5kZikgPT0gInJvdyJdIDwtICJDeXRva2luZV9YIgpuYW1lcyhjb3JyX2Jpb21hcmtlcnMucmFuay5kZilbbmFtZXMoY29ycl9iaW9tYXJrZXJzLnJhbmsuZGYpID09ICJjb2x1bW4iXSA8LSAiQ3l0b2tpbmVZIgpuYW1lcyhjb3JyX2Jpb21hcmtlcnMucmFuay5kZilbbmFtZXMoY29ycl9iaW9tYXJrZXJzLnJhbmsuZGYpID09ICJjb3IiXSA8LSAiU3BlYXJtYW5SaG8iCgpEVDo6ZGF0YXRhYmxlKGNvcnJfYmlvbWFya2Vycy5yYW5rLmRmKQoKZndyaXRlKGNvcnJfYmlvbWFya2Vycy5yYW5rLmRmLCBmaWxlID0gcGFzdGUwKE9VVF9sb2MsICIvIixUb2RheSwiLmNvcnJlbGF0aW9uX2N5dG9raW5lcy50eHQiKSkKCmBgYAoKYGBge3IgTUNQMSB2cyBDeXRva2luZXMgaGVhdG1hcH0KIyBBZGQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBhcmd1bWVudCBsYWIgPSBUUlVFCnAxIDwtIGdnY29ycnBsb3QoY29ycl9iaW9tYXJrZXJzLnJhbmssIAogICAgICAgICAgIG1ldGhvZCA9ICJzcXVhcmUiLCAKICAgICAgICAgICB0eXBlID0gImxvd2VyIiwKICAgICAgICAgICB0aXRsZSA9ICJDcm9zcyBiaW9tYXJrZXIgY29ycmVsYXRpb25zIiwgCiAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBUUlVFLCBsZWdlbmQudGl0bGUgPSBicXVvdGUoIlNwZWFybWFuJ3Mifml0YWxpYyhyaG8pKSwKICAgICAgICAgICBnZ3RoZW1lID0gZ2dwbG90Mjo6dGhlbWVfbWluaW1hbCwgb3V0bGluZS5jb2xvciA9ICIjRkZGRkZGIiwKICAgICAgICAgICBzaG93LmRpYWcgPSBUUlVFLAogICAgICAgICAgIGhjLm9yZGVyID0gRkFMU0UsIAogICAgICAgICAgIGxhYiA9IEZBTFNFLAogICAgICAgICAgIGRpZ2l0cyA9IDMsCiAgICAgICAgICAgdGwuY2V4ID0gNiwKICAgICAgICAgICAjIHhsYWIgPSBjKCJNQ1AxIiksCiAgICAgICAgICAgIyBwLm1hdCA9IGNvcnJfYmlvbWFya2Vyc19wLnJhbmssIHNpZy5sZXZlbCA9IDAuMDUsCiAgICAgICAgICAgY29sb3JzID0gYygiIzEyOTBEOSIsICIjRkZGRkZGIiwgIiNFNTU3MzgiKSkKcDEKZ2dzYXZlKGZpbGVuYW1lID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsIFRvZGF5LCAiLmNvcnJlbGF0aW9uX2N5dG9raW5lcy5wbmciKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQpnZ3NhdmUoZmlsZW5hbWUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIiwgVG9kYXksICIuY29ycmVsYXRpb25fY3l0b2tpbmVzLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpybShwMSkKCmBgYAoKV2hpbGUgdmlzdWFsbHkgYWN0cmFjdGl2ZSB3ZSBhcmUgbm90IG5lY2Vzc2FyaWx5IGludGVyZXN0ZWQgaW4gdGhlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGFsbCB0aGUgY3l0b2tpbmVzLCByYXRoZXIgb2YgTUNQMSB3aXRoIG90aGVyIGN5dG9raW5lcyBvbmx5LgoKYGBge3IgTUNQMSB2cyBDeXRva2luZXMgYmFycGxvdH0KdGVtcCA8LSBzdWJzZXQoY29ycl9iaW9tYXJrZXJzLnJhbmsuZGYsIEN5dG9raW5lX1ggPT0gIk1DUDEgKEwsIGV4cDIsIHBnL21MKSIgKQp0ZW1wJHBfbG9nMTAgPC0gLWxvZzEwKHRlbXAkcCkKcF90aHJlc2hvbGQgPC0gLWxvZzEwKDAuMDUvMjkpCnBfdGhyZXNob2xkCnAxIDwtIGdnYmFycGxvdCh0ZW1wLCB4ID0gIkN5dG9raW5lWSIsIHkgPSAiU3BlYXJtYW5SaG8iLAogICAgICAgICAgZmlsbCA9ICJDeXRva2luZVkiLCAgICAgICAgICAgICAgICMgY2hhbmdlIGZpbGwgY29sb3IgYnkgY3lsCiAgICAgICAgICAjIGNvbG9yID0gIndoaXRlIiwgICAgICAgICAgICAjIFNldCBiYXIgYm9yZGVyIGNvbG9ycyB0byB3aGl0ZQogICAgICAgICAgcGFsZXR0ZSA9IHVpdGhvZl9jb2xvciwgICAgICAgICAgICAjIGpjbyBqb3VybmFsIGNvbG9yIHBhbGV0dC4gc2VlID9nZ3BhcgogICAgICAgICAgeGxhYiA9ICJDeXRva2luZSIsCiAgICAgICAgICB5bGFiID0gZXhwcmVzc2lvbigiU3BlYXJtYW4ncyJ+aXRhbGljKHJobykpLAogICAgICAgICAgc29ydC52YWwgPSAiZGVzYyIsICAgICAgICAgICMgU29ydCB0aGUgdmFsdWUgaW4gZHNjZW5kaW5nIG9yZGVyCiAgICAgICAgICBzb3J0LmJ5Lmdyb3VwcyA9IEZBTFNFLCAgICAgIyBEb24ndCBzb3J0IGluc2lkZSBlYWNoIGdyb3VwCiAgICAgICAgICB4LnRleHQuYW5nbGUgPSA0NSwgIyBSb3RhdGUgdmVydGljYWxseSB4IGF4aXMgdGV4dHMKICAgICAgICAgIGNleCA9IDAuOAogICAgICAgICAgKQpnZ3BhcihwMSwgbGVnZW5kID0gImJvdHRvbSIsIAogICAgICBsZWdlbmQudGl0bGUgPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSkpIAoKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLmJhcnBsb3RfcGdtTC5NQ1AxX2V4cDJfdnNfQ3l0b2tpbmVzLnBuZyIpLCBwbG90ID0gbGFzdF9wbG90KCkpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5iYXJwbG90X3BnbUwuTUNQMV9leHAyX3ZzX0N5dG9raW5lcy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQpybShwMSkKCnRlbXAgPC0gc3Vic2V0KGNvcnJfYmlvbWFya2Vycy5yYW5rLmRmLCBDeXRva2luZV9YID09ICJNQ1AxIChMLCBleHAxKSIgKQp0ZW1wJHBfbG9nMTAgPC0gLWxvZzEwKHRlbXAkcCkKcF90aHJlc2hvbGQgPC0gLWxvZzEwKDAuMDUvMjkpCnBfdGhyZXNob2xkCnAxIDwtIGdnYmFycGxvdCh0ZW1wLCB4ID0gIkN5dG9raW5lWSIsIHkgPSAiU3BlYXJtYW5SaG8iLAogICAgICAgICAgZmlsbCA9ICJDeXRva2luZVkiLCAgICAgICAgICAgICAgICMgY2hhbmdlIGZpbGwgY29sb3IgYnkgY3lsCiAgICAgICAgICAjIGNvbG9yID0gIndoaXRlIiwgICAgICAgICAgICAjIFNldCBiYXIgYm9yZGVyIGNvbG9ycyB0byB3aGl0ZQogICAgICAgICAgcGFsZXR0ZSA9IHVpdGhvZl9jb2xvciwgICAgICAgICAgICAjIGpjbyBqb3VybmFsIGNvbG9yIHBhbGV0dC4gc2VlID9nZ3BhcgogICAgICAgICAgeGxhYiA9ICJDeXRva2luZSIsCiAgICAgICAgICB5bGFiID0gZXhwcmVzc2lvbigiU3BlYXJtYW4ncyJ+aXRhbGljKHJobykpLAogICAgICAgICAgc29ydC52YWwgPSAiZGVzYyIsICAgICAgICAgICMgU29ydCB0aGUgdmFsdWUgaW4gZHNjZW5kaW5nIG9yZGVyCiAgICAgICAgICBzb3J0LmJ5Lmdyb3VwcyA9IEZBTFNFLCAgICAgIyBEb24ndCBzb3J0IGluc2lkZSBlYWNoIGdyb3VwCiAgICAgICAgICB4LnRleHQuYW5nbGUgPSA0NSwgIyBSb3RhdGUgdmVydGljYWxseSB4IGF4aXMgdGV4dHMKICAgICAgICAgIGNleCA9IDAuOAogICAgICAgICAgKQpnZ3BhcihwMSwgbGVnZW5kID0gImJvdHRvbSIsIAogICAgICBsZWdlbmQudGl0bGUgPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSkpIAoKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLmJhcnBsb3RfcGdtTC5NQ1AxX2V4cDFfdnNfQ3l0b2tpbmVzLnBuZyIpLCBwbG90ID0gbGFzdF9wbG90KCkpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5iYXJwbG90X3BnbUwuTUNQMV9leHAxX3ZzX0N5dG9raW5lcy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKcm0ocDEpCgpgYGAKCkFub3RoZXIgdmVyc2lvbiAtIHByb2JsYWJseSBub3QgZ29vZC4gCmBgYHtyIE1DUDEgdnMgQ3l0b2tpbmVzIGRvdGNoYXJ0fQp0ZW1wIDwtIHN1YnNldChjb3JyX2Jpb21hcmtlcnMucmFuay5kZiwgQ3l0b2tpbmVfWCA9PSAiTUNQMSAoTCwgZXhwMiwgcGcvbUwpIiApCnRlbXAkcF9sb2cxMCA8LSAtbG9nMTAodGVtcCRwKQpwX3RocmVzaG9sZCA8LSAtbG9nMTAoMC4wNS8yOSkKcF90aHJlc2hvbGQKcDEgPC0gZ2dkb3RjaGFydCh0ZW1wLCB4ID0gIkN5dG9raW5lWSIsIHkgPSAicF9sb2cxMCIsCiAgICAgICAgICAgY29sb3IgPSAiQ3l0b2tpbmVZIiwgI2ZpbGwgPSAiQ3l0b2tpbmVZIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENvbG9yIGJ5IGdyb3VwcwogICAgICAgICAgIHBhbGV0dGUgPSB1aXRob2ZfY29sb3IsICMgQ3VzdG9tIGNvbG9yIHBhbGV0dGUKICAgICAgICAgICB4bGFiID0gIkN5dG9raW5lIiwKICAgICAgICAgICB5bGFiID0gZXhwcmVzc2lvbihsb2dbMTBdfiIoIn5pdGFsaWMocCl+IiktdmFsdWUiKSwKICAgICAgICAgICB5bGltID0gYygwLCA5KSwKICAgICAgICAgICBzb3J0aW5nID0gImRlc2NlbmRpbmciLCAgICAgICAgICAgICAgICAgICAgICAgIyBTb3J0IHZhbHVlIGluIGRlc2NlbmRpbmcgb3JkZXIKICAgICAgICAgICBhZGQgPSAic2VnbWVudHMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgc2VnbWVudHMgZnJvbSB5ID0gMCB0byBkb3RzCiAgICAgICAgICAgcm90YXRlID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJvdGF0ZSB2ZXJ0aWNhbGx5CiAgICAgICAgICAgIyBncm91cCA9ICJDeXRva2luZVkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcmRlciBieSBncm91cHMKICAgICAgICAgICBkb3Quc2l6ZSA9IDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMYXJnZSBkb3Qgc2l6ZQogICAgICAgICAgIGxhYmVsID0gcm91bmQodGVtcCRTcGVhcm1hblJobywgZGlnaXRzID0gMyksICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbXBnIHZhbHVlcyBhcyBkb3QgbGFiZWxzCiAgICAgICAgICAgZm9udC5sYWJlbCA9IGxpc3QoY29sb3IgPSAid2hpdGUiLCBzaXplID0gOCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICkKZ2dwYXIocDEsIGxlZ2VuZCA9ICIiLCAKICAgICAgbGVnZW5kLnRpdGxlID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKQoKZ2dzYXZlKGZpbGUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIixUb2RheSwiLkFFREIuQ0VBLk1DUDEucGxhcXVlLmRvdGNoYXJ0Lk1DUDFfdnNfQ3l0b2tpbmVzLnBuZyIpLCBwbG90ID0gbGFzdF9wbG90KCkpCmdnc2F2ZShmaWxlID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5NQ1AxLnBsYXF1ZS5kb3RjaGFydC5NQ1AxX3ZzX0N5dG9raW5lcy5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKcm0odGVtcCwgcDEpCgpgYGAKCgojIyBNQ1AxIHZzLiBjeXRva2luZXMgcGxhcXVlIGxldmVscyBgbG0oKWAKCiMjIyBNb2RlbCAxCgpJbiB0aGlzIG1vZGVsIHdlIGNvcnJlY3QgZm9yIF9BZ2VfLCBfR2VuZGVyXywgYW5kIF95ZWFyIG9mIHN1cmdlcnlfLgoKSGVyZSB3ZSB1c2UgdGhlIGludmVyc2UtcmFuayBub3JtYWxpemVkIGRhdGEgLSB2aXN1YWxseSB0aGlzIGlzIG1vcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQuCgpBbmFseXNpcyBvZiBwbGFxdWUgY3l0b2tpbmVzIHRyYWl0cyBhcyBhIGZ1bmN0aW9uIG9mIHBsYXF1ZSBNQ1AxIGxldmVscy4KYGBge3IgQ3Jvc3NTZWM6IEN5dG9raW5lcyAtIGxpbmVhciByZWdyZXNzaW9uIE1PREVMMSBSQU5LLCBpbmNsdWRlPVRSVUUsIHBhZ2VkLnByaW50PVRSVUV9CgpHTE0ucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE1LCBucm93ID0gMCkpCmNhdCgiUnVubmluZyBsaW5lYXIgcmVncmVzc2lvbi4uLlxuIikKZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTkspKSB7CiAgUFJPVEVJTiA9IFRSQUlUUy5QUk9URUlOLlJBTktbcHJvdGVpbl0KICBjYXQocGFzdGUwKCJcbkFuYWx5c2lzIG9mICIsUFJPVEVJTiwiLlxuIikpCiAgZm9yICh0cmFpdCBpbiAxOmxlbmd0aChwcm90ZWluc19vZl9pbnRlcmVzdF9yYW5rKSkgewogICAgVFJBSVQgPSBwcm90ZWluc19vZl9pbnRlcmVzdF9yYW5rW3RyYWl0XQogICAgY2F0KHBhc3RlMCgiXG4tIHByb2Nlc3NpbmcgIixUUkFJVCwiXG5cbiIpKQogICAgY3VycmVudERGIDwtIGFzLmRhdGEuZnJhbWUoQUVEQi5DRUEgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLiwgUFJPVEVJTiwgVFJBSVQsIENPVkFSSUFURVNfTTEpICU+JQogICAgICBmaWx0ZXIoY29tcGxldGUuY2FzZXMoLikpKSAlPiUKICAgICAgZmlsdGVyX2lmKH5pcy5udW1lcmljKC4pLCBhbGxfdmFycyghaXMuaW5maW5pdGUoLikpKQogICAgIyBmb3IgZGVidWcKICAgICMgcHJpbnQoRFQ6OmRhdGF0YWJsZShjdXJyZW50REYpKQogICAgIyBwcmludChucm93KGN1cnJlbnRERikpCiAgICAjIHByaW50KHN0cihjdXJyZW50REYpKQogICAgIyMjIHVuaXZhcmlhdGUKICAgIGZpdCA8LSBsbShjdXJyZW50REZbLFBST1RFSU5dIH4gY3VycmVudERGWyxUUkFJVF0gKyBBZ2UgKyBHZW5kZXIgKyBPUmRhdGVfeWVhciwgZGF0YSA9IGN1cnJlbnRERikKICAgIG1vZGVsX3N0ZXAgPC0gc3RlcEFJQyhmaXQsIGRpcmVjdGlvbiA9ICJib3RoIiwgdHJhY2UgPSBGQUxTRSkKICAgIHByaW50KG1vZGVsX3N0ZXApCiAgICBwcmludChzdW1tYXJ5KGZpdCkpCgogICAgR0xNLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE1LCBucm93ID0gMCkpCiAgICBHTE0ucmVzdWx0cy5URU1QWzEsXSA9IEdMTS5DT04oZml0LCAiQUVEQi5DRUEiLCBQUk9URUlOLCBUUkFJVCwgdmVyYm9zZSA9IFRSVUUpCiAgICBHTE0ucmVzdWx0cyA9IHJiaW5kKEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QKQogIH0KfQpjYXQoIkVkaXQgdGhlIGNvbHVtbiBuYW1lcy4uLlxuIikKY29sbmFtZXMoR0xNLnJlc3VsdHMpID0gYygiRGF0YXNldCIsICJQcmVkaWN0b3IiLCAiVHJhaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIk9SIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVC12YWx1ZSIsICJQLXZhbHVlIiwgInJeMiIsICJyXjJfYWRqIiwgIkFFX04iLCAiTW9kZWxfTiIsICJQZXJjX01pc3MiKQoKY2F0KCJDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKR0xNLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJEJldGEpCkdMTS5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHMuZS5tLikKR0xNLnJlc3VsdHMkT1IgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRPUikKR0xNLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGxvdzk1Q0kpCkdMTS5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHVwOTVDSSkKR0xNLnJlc3VsdHMkYFQtdmFsdWVgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFQtdmFsdWVgKQpHTE0ucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUC12YWx1ZWApCkdMTS5yZXN1bHRzJGByXjJgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMmApCkdMTS5yZXN1bHRzJGByXjJfYWRqYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfYWRqYCkKR0xNLnJlc3VsdHMkYEFFX05gIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYEFFX05gKQpHTE0ucmVzdWx0cyRgTW9kZWxfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgTW9kZWxfTmApCkdMTS5yZXN1bHRzJGBQZXJjX01pc3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2ApCgpgYGAKCmBgYHtyIENyb3NzU2VjOiBDeXRva2luZXMgLSBsaW5lYXIgcmVncmVzc2lvbiBNT0RFTDEgUkFOSyBXcml0aW5nfQpEVDo6ZGF0YXRhYmxlKEdMTS5yZXN1bHRzKQoKIyBTYXZlIHRoZSBkYXRhCmNhdCgiV3JpdGluZyByZXN1bHRzIHRvIEV4Y2VsLWZpbGUuLi5cbiIpCiMjIyBVbml2YXJpYXRlCmxpYnJhcnkob3Blbnhsc3gpCndyaXRlLnhsc3goR0xNLnJlc3VsdHMsCiAgICAgICAgICAgZmlsZSA9IHBhc3RlMChPVVRfbG9jLCAiLyIsVG9kYXksIi5BRURCLkNFQS5Db24uVW5pLk1DUDFfUGxhcXVlLkN5dG9raW5lc19QbGFxdWVzLlJBTksuTU9ERUwxLnhsc3giKSwKICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgc2hlZXROYW1lID0gIkNvbi5VbmkuUGxhcXVlUGhlbm8iKQojIFJlbW92aW5nIGludGVybWVkaWF0ZXMKY2F0KCJSZW1vdmluZyBpbnRlcm1lZGlhdGUgZmlsZXMuLi5cbiIpCnJtKFRSQUlULCB0cmFpdCwgY3VycmVudERGLCBHTE0ucmVzdWx0cywgR0xNLnJlc3VsdHMuVEVNUCwgZml0LCBtb2RlbF9zdGVwKQoKCmBgYAoKCgojIyMgTW9kZWwgMgoKSW4gdGhpcyBtb2RlbCB3ZSBjb3JyZWN0IGZvciBfQWdlXywgX0dlbmRlcl8sIF95ZWFyIG9mIHN1cmdlcnlfLCBfSHlwZXJ0ZW5zaW9uIHN0YXR1c18sIF9EaWFiZXRlcyBzdGF0dXNfLCBfY3VycmVudCBzbW9rZXIgc3RhdHVzXywgX2xpcGlkLWxvd2VyaW5nIGRydWdzIChMTERzKV8sIF9hbnRpcGxhdGVsZXQgbWVkaWNhdGlvbl8sIF9lR0ZSIChNRFJEKV8sIF9CTUlfLCBfTWVkSHhfQ1ZEXyAoY29tYmluYXRpb24gb2YgX0NBRCBoaXN0b3J5XywgX3N0cm9rZSBoaXN0b3J5XywgYW5kIF9wZXJpcGhlcmFsIGludGVydmVudGlvbnNfKSwgYW5kIF9zdGVub3Npc18uCgpIZXJlIHdlIHVzZSB0aGUgaW52ZXJzZS1yYW5rIG5vcm1hbGl6ZWQgZGF0YSAtIHZpc3VhbGx5IHRoaXMgaXMgbW9yZSBub3JtYWxseSBkaXN0cmlidXRlZC4KCkFuYWx5c2lzIG9mIHBsYXF1ZSBjeXRva2luZXMgYXMgYSBmdW5jdGlvbiBvZiBwbGFxdWUgTUNQMSBsZXZlbHMuCmBgYHtyIENyb3NzU2VjOiBDeXRva2luZXMgLSBsaW5lYXIgcmVncmVzc2lvbiBNT0RFTDIgUkFOSywgaW5jbHVkZT1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQoKR0xNLnJlc3VsdHMgPC0gZGF0YS5mcmFtZShtYXRyaXgoTkEsIG5jb2wgPSAxNSwgbnJvdyA9IDApKQpjYXQoIlJ1bm5pbmcgbGluZWFyIHJlZ3Jlc3Npb24uLi5cbiIpCmZvciAocHJvdGVpbiBpbiAxOmxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LKSkgewogIFBST1RFSU4gPSBUUkFJVFMuUFJPVEVJTi5SQU5LW3Byb3RlaW5dCiAgY2F0KHBhc3RlMCgiXG5BbmFseXNpcyBvZiAiLFBST1RFSU4sIi5cbiIpKQogIGZvciAodHJhaXQgaW4gMTpsZW5ndGgocHJvdGVpbnNfb2ZfaW50ZXJlc3RfcmFuaykpIHsKICAgIFRSQUlUID0gcHJvdGVpbnNfb2ZfaW50ZXJlc3RfcmFua1t0cmFpdF0KICAgIGNhdChwYXN0ZTAoIlxuLSBwcm9jZXNzaW5nICIsVFJBSVQsIlxuXG4iKSkKICAgIGN1cnJlbnRERiA8LSBhcy5kYXRhLmZyYW1lKEFFREIuQ0VBICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC4sIFBST1RFSU4sIFRSQUlULCBDT1ZBUklBVEVTX00yKSAlPiUKICAgICAgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSkgJT4lCiAgICAgIGZpbHRlcl9pZih+aXMubnVtZXJpYyguKSwgYWxsX3ZhcnMoIWlzLmluZmluaXRlKC4pKSkKICAgICMgZm9yIGRlYnVnCiAgICAjIHByaW50KERUOjpkYXRhdGFibGUoY3VycmVudERGKSkKICAgICMgcHJpbnQobnJvdyhjdXJyZW50REYpKQogICAgIyBwcmludChzdHIoY3VycmVudERGKSkKICAgICMjIyB1bml2YXJpYXRlCiAgICBmaXQgPC0gbG0oY3VycmVudERGWyxQUk9URUlOXSB+IGN1cnJlbnRERlssVFJBSVRdICsgQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIgKyAKICAgICAgICAgICAgICAgIEh5cGVydGVuc2lvbi5jb21wb3NpdGUgKyBEaWFiZXRlc1N0YXR1cyArIFNtb2tlclN0YXR1cyArIAogICAgICAgICAgICAgICAgTWVkLlN0YXRpbi5MTEQgKyBNZWQuYWxsLmFudGlwbGF0ZWxldCArIEdGUl9NRFJEICsgQk1JICsgCiAgICAgICAgICAgICAgICBNZWRIeF9DVkQgKyBzdGVub3NlLCAKICAgICAgICAgICAgICBkYXRhID0gY3VycmVudERGKQogICAgbW9kZWxfc3RlcCA8LSBzdGVwQUlDKGZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQogICAgcHJpbnQobW9kZWxfc3RlcCkKICAgIHByaW50KHN1bW1hcnkoZml0KSkKICAgIAogICAgR0xNLnJlc3VsdHMuVEVNUCA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE1LCBucm93ID0gMCkpCiAgICBHTE0ucmVzdWx0cy5URU1QWzEsXSA9IEdMTS5DT04oZml0LCAiQUVEQi5DRUEiLCBQUk9URUlOLCBUUkFJVCwgdmVyYm9zZSA9IFRSVUUpCiAgICBHTE0ucmVzdWx0cyA9IHJiaW5kKEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QKQogIH0KfQpjYXQoIkVkaXQgdGhlIGNvbHVtbiBuYW1lcy4uLlxuIikKY29sbmFtZXMoR0xNLnJlc3VsdHMpID0gYygiRGF0YXNldCIsICJQcmVkaWN0b3IiLCAiVHJhaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJCZXRhIiwgInMuZS5tLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIk9SIiwgImxvdzk1Q0kiLCAidXA5NUNJIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVC12YWx1ZSIsICJQLXZhbHVlIiwgInJeMiIsICJyXjJfYWRqIiwgIkFFX04iLCAiTW9kZWxfTiIsICJQZXJjX01pc3MiKQoKY2F0KCJDb3JyZWN0IHRoZSB2YXJpYWJsZSB0eXBlcy4uLlxuIikKR0xNLnJlc3VsdHMkQmV0YSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJEJldGEpCkdMTS5yZXN1bHRzJHMuZS5tLiA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHMuZS5tLikKR0xNLnJlc3VsdHMkT1IgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRPUikKR0xNLnJlc3VsdHMkbG93OTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGxvdzk1Q0kpCkdMTS5yZXN1bHRzJHVwOTVDSSA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJHVwOTVDSSkKR0xNLnJlc3VsdHMkYFQtdmFsdWVgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFQtdmFsdWVgKQpHTE0ucmVzdWx0cyRgUC12YWx1ZWAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgUC12YWx1ZWApCkdMTS5yZXN1bHRzJGByXjJgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYHJeMmApCkdMTS5yZXN1bHRzJGByXjJfYWRqYCA8LSBhcy5udW1lcmljKEdMTS5yZXN1bHRzJGByXjJfYWRqYCkKR0xNLnJlc3VsdHMkYEFFX05gIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYEFFX05gKQpHTE0ucmVzdWx0cyRgTW9kZWxfTmAgPC0gYXMubnVtZXJpYyhHTE0ucmVzdWx0cyRgTW9kZWxfTmApCkdMTS5yZXN1bHRzJGBQZXJjX01pc3NgIDwtIGFzLm51bWVyaWMoR0xNLnJlc3VsdHMkYFBlcmNfTWlzc2ApCgpgYGAKCmBgYHtyIENyb3NzU2VjOiBDeXRva2luZXMgLSBsaW5lYXIgcmVncmVzc2lvbiBNT0RFTDIgUkFOSywgd3JpdGluZ30KRFQ6OmRhdGF0YWJsZShHTE0ucmVzdWx0cykKCiMgU2F2ZSB0aGUgZGF0YQpjYXQoIldyaXRpbmcgcmVzdWx0cyB0byBFeGNlbC1maWxlLi4uXG4iKQojIyMgVW5pdmFyaWF0ZQpsaWJyYXJ5KG9wZW54bHN4KQp3cml0ZS54bHN4KEdMTS5yZXN1bHRzLAogICAgICAgICAgIGZpbGUgPSBwYXN0ZTAoT1VUX2xvYywgIi8iLFRvZGF5LCIuQUVEQi5DRUEuQ29uLk11bHRpLk1DUDFfUGxhcXVlLkN5dG9raW5lc19QbGFxdWVzLlJBTksuTU9ERUwyLnhsc3giKSwKICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgc2hlZXROYW1lID0gIkNvbi5NdWx0aS5QbGFxdWVQaGVubyIpCiMgUmVtb3ZpbmcgaW50ZXJtZWRpYXRlcwpjYXQoIlJlbW92aW5nIGludGVybWVkaWF0ZSBmaWxlcy4uLlxuIikKcm0oVFJBSVQsIHRyYWl0LCBjdXJyZW50REYsIEdMTS5yZXN1bHRzLCBHTE0ucmVzdWx0cy5URU1QLCBmaXQsIG1vZGVsX3N0ZXApCgoKYGBgCgojIyBNQ1AxIGxldmVscyB2cy4gdnVsbmVyYWJpbGl0eSBpbmRleAoKSGVyZSB3ZSBjYWxjdWxhdGUgdGhlIHBsYXF1ZSBpbnN0YWJpbGl0eS92dWxuZXJhYmlsaXR5IGluZGV4IGFuZCB2aXN1YWxpemUgdGhlIE1DUDEgbGV2ZWxzIGluIHBsYXF1ZS4KCmBgYHtyIFBsYXF1ZSBWdWxuZXJhYmlsaXR5fQojIFBsYXF1ZSB2dWxuZXJhYmlsaXR5Cgp0YWJsZShBRURCLkNFQSRNYWNyb3BoYWdlcy5iaW4pCnRhYmxlKEFFREIuQ0VBJEZhdC5iaW5fMTApCnRhYmxlKEFFREIuQ0VBJENvbGxhZ2VuLmJpbikKdGFibGUoQUVEQi5DRUEkU01DLmJpbikKdGFibGUoQUVEQi5DRUEkSVBILmJpbikKCiMgU1BTUyBjb2RlCgojIAojICoqKiBzeW50YXgtIFBsYXF1ZSB2dWxuZXJhYmlsaXR5KiouCiMgQ09NUFVURSBNYWNyb19pbnN0YWIgPSAtOTk5LgojIElGIG1hY3JvcGhhZ2VzLmJpbj0yIE1hY3JvX2luc3RhYj0xLgojIElGIG1hY3JvcGhhZ2VzLmJpbj0xIE1hY3JvX2luc3RhYj0wLgojIEVYRUNVVEUuCiMgCiMgQ09NUFVURSBGYXQxMF9pbnN0YWIgPSAtOTk5LgojIElGIEZhdC5iaW5fMTA9MiBGYXQxMF9pbnN0YWI9MS4KIyBJRiBGYXQuYmluXzEwPTEgRmF0MTBfaW5zdGFiPTAuCiMgRVhFQ1VURS4KIyAKIyBDT01QVVRFIGNvbGxfaW5zdGFiPS05OTkuCiMgSUYgQ29sbGFnZW4uYmluPTIgY29sbF9pbnN0YWI9MC4KIyBJRiBDb2xsYWdlbi5iaW49MSBjb2xsX2luc3RhYj0xLgojIEVYRUNVVEUuCiMgCiMgCiMgQ09NUFVURSBTTUNfaW5zdGFiPS05OTkuCiMgSUYgU01DLmJpbj0yIFNNQ19pbnN0YWI9MC4KIyBJRiBTTUMuYmluPTEgU01DX2luc3RhYj0xLgojIEVYRUNVVEUuCiMgCiMgQ09NUFVURSBJUEhfaW5zdGFiPS05OTkuCiMgSUYgSVBILmJpbj0wIElQSF9pbnN0YWI9MC4KIyBJRiBJUEguYmluPTEgSVBIX2luc3RhYj0xLgojIEVYRUNVVEUuCiMgCiMgQ09NUFVURSBJbnN0YWJpbGl0eT1NYWNyb19pbnN0YWIgKyBGYXQxMF9pbnN0YWIgKyAgY29sbF9pbnN0YWIgKyBTTUNfaW5zdGFiICsgSVBIX2luc3RhYi4KIyBFWEVDVVRFLgoKIyBGaXggcGxhcXVlcGhlbm90eXBlcwphdHRhY2goQUVEQi5DRUEpCiMgbWFjIGluc3RhYmlsaXR5CkFFREIuQ0VBWywiTUFDX0luc3RhYmlsaXR5Il0gPC0gTkEKQUVEQi5DRUEkTUFDX0luc3RhYmlsaXR5W01hY3JvcGhhZ2VzLmJpbiA9PSAtOTk5XSA8LSBOQQpBRURCLkNFQSRNQUNfSW5zdGFiaWxpdHlbTWFjcm9waGFnZXMuYmluID09ICJuby9taW5vciJdIDwtIDAKQUVEQi5DRUEkTUFDX0luc3RhYmlsaXR5W01hY3JvcGhhZ2VzLmJpbiA9PSAibW9kZXJhdGUvaGVhdnkiXSA8LSAxCgojIGZhdCBpbnN0YWJpbGl0eQpBRURCLkNFQVssIkZBVDEwX0luc3RhYmlsaXR5Il0gPC0gTkEKQUVEQi5DRUEkRkFUMTBfSW5zdGFiaWxpdHlbRmF0LmJpbl8xMCA9PSAtOTk5XSA8LSBOQQpBRURCLkNFQSRGQVQxMF9JbnN0YWJpbGl0eVtGYXQuYmluXzEwID09ICIgPDEwJSJdIDwtIDAKQUVEQi5DRUEkRkFUMTBfSW5zdGFiaWxpdHlbRmF0LmJpbl8xMCA9PSAiID4xMCUiXSA8LSAxCgojIGNvbCBpbnN0YWJpbGl0eSAKQUVEQi5DRUFbLCJDT0xfSW5zdGFiaWxpdHkiXSA8LSBOQQpBRURCLkNFQSRDT0xfSW5zdGFiaWxpdHlbQ29sbGFnZW4uYmluID09IC05OTldIDwtIE5BCkFFREIuQ0VBJENPTF9JbnN0YWJpbGl0eVtDb2xsYWdlbi5iaW4gPT0gIm5vL21pbm9yIl0gPC0gMQpBRURCLkNFQSRDT0xfSW5zdGFiaWxpdHlbQ29sbGFnZW4uYmluID09ICJtb2RlcmF0ZS9oZWF2eSJdIDwtIDAKCiMgc21jIGluc3RhYmlsaXR5CkFFREIuQ0VBWywiU01DX0luc3RhYmlsaXR5Il0gPC0gTkEKQUVEQi5DRUEkU01DX0luc3RhYmlsaXR5W1NNQy5iaW4gPT0gLTk5OV0gPC0gTkEKQUVEQi5DRUEkU01DX0luc3RhYmlsaXR5W1NNQy5iaW4gPT0gIm5vL21pbm9yIl0gPC0gMQpBRURCLkNFQSRTTUNfSW5zdGFiaWxpdHlbU01DLmJpbiA9PSAibW9kZXJhdGUvaGVhdnkiXSA8LSAwCgojIGlwaCBpbnN0YWJpbGl0eQpBRURCLkNFQVssIklQSF9JbnN0YWJpbGl0eSJdIDwtIE5BCkFFREIuQ0VBJElQSF9JbnN0YWJpbGl0eVtJUEguYmluID09IC05OTldIDwtIE5BCkFFREIuQ0VBJElQSF9JbnN0YWJpbGl0eVtJUEguYmluID09ICJubyJdIDwtIDAKQUVEQi5DRUEkSVBIX0luc3RhYmlsaXR5W0lQSC5iaW4gPT0gInllcyJdIDwtIDEKCmRldGFjaChBRURCLkNFQSkKCnRhYmxlKEFFREIuQ0VBJE1BQ19JbnN0YWJpbGl0eSwgdXNlTkEgPSAiaWZhbnkiKQp0YWJsZShBRURCLkNFQSRGQVQxMF9JbnN0YWJpbGl0eSwgdXNlTkEgPSAiaWZhbnkiKQp0YWJsZShBRURCLkNFQSRDT0xfSW5zdGFiaWxpdHksIHVzZU5BID0gImlmYW55IikKdGFibGUoQUVEQi5DRUEkU01DX0luc3RhYmlsaXR5LCB1c2VOQSA9ICJpZmFueSIpCnRhYmxlKEFFREIuQ0VBJElQSF9JbnN0YWJpbGl0eSwgdXNlTkEgPSAiaWZhbnkiKQoKIyBjcmVhdGluZyB2dWxuZXJhYmlsaXR5IGluZGV4CkFFREIuQ0VBIDwtIEFFREIuQ0VBICU+JSBtdXRhdGUoUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXggPSBmYWN0b3Iocm93U3VtcyguW2dyZXAoIl9JbnN0YWJpbGl0eSIsIG5hbWVzKC4pKV0sIG5hLnJtID0gVFJVRSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCnRhYmxlKEFFREIuQ0VBJFBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4LCB1c2VOQSA9ICJpZmFueSIpCgojIHN0cihBRURCLkNFQSRQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCkKCmBgYAoKSGVyZSB3ZSBwbG90IHRoZSBsZXZlbHMgb2YgaW52ZXJzZS1yYW5rIG5vcm1hbCB0cmFuc2Zvcm1lZCBgTUNQMWAgcGxhcXVlIGxldmVscyBmcm9tIGV4cGVyaW1lbnQgMSBhbmQgMiB0byB0aGUgYFBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4YC4gCmBgYHtyIEZpeCBPUnllYXJHcm91cH0KbGlicmFyeShzamxhYmVsbGVkKQoKYXR0YWNoKEFFREIuQ0VBKQpBRURCLkNFQSR5ZWFydGVtcCA8LSBhcy5udW1lcmljKHllYXIoQUVEQi5DRUEkZGF0ZW9rKSkKQUVEQi5DRUFbLCJPUnllYXJHcm91cCJdIDwtIE5BCkFFREIuQ0VBJE9SeWVhckdyb3VwW3llYXJ0ZW1wIDw9IDIwMDddIDwtICI8IDIwMDciCkFFREIuQ0VBJE9SeWVhckdyb3VwW3llYXJ0ZW1wID4gMjAwN10gPC0gIj4gMjAwNyIKZGV0YWNoKEFFREIuQ0VBKQoKdGFibGUoQUVEQi5DRUEkT1J5ZWFyR3JvdXAsIEFFREIuQ0VBJE9SZGF0ZV95ZWFyKQpgYGAKCiMjIyBNQ1AxIHBsYXF1ZSBsZXZlbHMgdnMuIHBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4CgoxLiBDb3VsZCB5b3UgcGxlYXNlIGFsc28gcHJvdmlkZSB0aGUgZmlndXJlIHNob3dpbmcgTUNQMSBsZXZlbHMgYnkgc3ltcHRvbWF0aWMvYXN5bXB0b21hdGljIHBsYXF1ZSwgc2VwYXJhdGVkIGluIG1lbiBhbmQgd29tZW4gYW5kIHdpdGggdGhlIHNhbWUgY29sb3IgY29kZSBsaWtlIHRoZSBvdGhlciBvbmVzIChlLmcuIGxpa2UgdGhlIG9uZSBieSBhZ2UpPyAKMi4gU2ltaWxhcmx5LCBJIHdvdWxkIGxpa2UgdG8gc2VlIGEgZmlndXJlIHdpdGggdGhlIE1DUDEgbGV2ZWxzIChhZ2FpbiBieSBzZXgpIGFjcm9zcyB0aGUgdmFsdWVzIG9mIHRoZSB2dWxuZXJhYmlsaXR5IGluZGV4IHNjb3JlICgwLDEsMiwzLDQsNSkuICBCeSB0aGUgd2F5IHRoaXMgYW5hbHlzaXMgY2FtZSB1cCB2ZXJ5IG5pY2VseSEhCgoKYGBge3IgTUNQMSBwZXIgUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4fQojIEdsb2JhbCB0ZXN0CmNvbXBhcmVfbWVhbnMoTUNQMV9wZ19tbF8yMDE1X3JhbmsgfiBQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCwgIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnAxIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCIsCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKElOVCwgZXhwIDIpIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwMSwgbGVnZW5kID0gImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIpCmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLCBUb2RheSwgIi5NQ1AxLnBsYXF1ZS5leHAyX3BnbUwuUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4LnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnAyIDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCIsCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCBieSBnZW5kZXIiLAogICAgICAgICAgICAgICAgICB5bGFiID0gIk1DUDEgcGxhcXVlIFtwZy9tTF1cbihJTlQsIGV4cCAyKSIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIkdlbmRlciIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSBjKCIjRDUyNjdCIiwgIiMxMjkwRDkiKSwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMoYWVzKGdyb3VwID0gR2VuZGVyKSwgbGFiZWwgPSAicC5mb3JtYXQiLCAgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHAyLCBsZWdlbmQgPSAiYm90dG9tIiwgbGVnZW5kLnRpdGxlID0gIlBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4IikKZ2dzYXZlKGZpbGVuYW1lID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsIFRvZGF5LCAiLk1DUDEucGxhcXVlLmV4cDJfcGdtTC5QbGFxdWVWdWxuZXJhYmlsaXR5SW5kZXguYnlHZW5kZXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCgpjb21wYXJlX21lYW5zKE1DUDFfcmFuayB+IFBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4LCAgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDMgPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gIlBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4IiwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKElOVCwgZXhwIDEpIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwMywgbGVnZW5kID0gImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIpCmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLCBUb2RheSwgIi5NQ1AxLnBsYXF1ZS5leHAxX3BnbUwuUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4LnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcmFuayB+IFBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4LCBncm91cC5ieSA9ICJHZW5kZXIiLCBkYXRhID0gQUVEQi5DRUEsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpwNCA8LSBnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSwgCiAgICAgICAgICAgICAgICAgIHggPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4IiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oSU5ULCBleHAgMSkiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJHZW5kZXIiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gYygiI0Q1MjY3QiIsICIjMTI5MEQ5IiksCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwNCwgbGVnZW5kID0gImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIpCmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLCBUb2RheSwgIi5NQ1AxLnBsYXF1ZS5leHAxX3BnbUwuUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4LmJ5R2VuZGVyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgsIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnA1IDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCIsCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKElOVCwgZXhwIDIpIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiLAogICAgICAgICAgICAgICAgICBwYWxldHRlID0gIm5wZyIsCiAgICAgICAgICAgICAgICAgIGZhY2V0LmJ5ID0gIk9SeWVhckdyb3VwIiwKICAgICAgICAgICAgICAgICAgYWRkID0gImppdHRlciIpICsKICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwgPSAicC5mb3JtYXQiLCAgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCmdncGFyKHA1LCBsZWdlbmQgPSAiYm90dG9tIiwgbGVnZW5kLnRpdGxlID0gIlBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4IikKZ2dzYXZlKGZpbGVuYW1lID0gcGFzdGUwKFBMT1RfbG9jLCAiLyIsIFRvZGF5LCAiLk1DUDEucGxhcXVlLmV4cDJfcGdtTC5QbGFxdWVWdWxuZXJhYmlsaXR5SW5kZXhfRmFjZXRfYnlZZWFyLnBkZiIpLCBwbG90ID0gbGFzdF9wbG90KCkpCgpjb21wYXJlX21lYW5zKE1DUDFfcGdfbWxfMjAxNV9yYW5rIH4gUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgsIGdyb3VwLmJ5ID0gIkdlbmRlciIsIGRhdGEgPSBBRURCLkNFQSwgbWV0aG9kID0gImtydXNrYWwudGVzdCIpCnA2IDwtIGdncHVicjo6Z2dib3hwbG90KEFFREIuQ0VBLCAKICAgICAgICAgICAgICAgICAgeCA9ICJQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCIsCiAgICAgICAgICAgICAgICAgIHkgPSAiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKElOVCwgZXhwIDIpIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9IGMoIiNENTI2N0IiLCAiIzEyOTBEOSIpLAogICAgICAgICAgICAgICAgICBmYWNldC5ieSA9ICJPUnllYXJHcm91cCIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwNiwgbGVnZW5kID0gImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIpCmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLCBUb2RheSwgIi5NQ1AxLnBsYXF1ZS5leHAyX3BnbUwuUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4X0ZhY2V0X2J5WWVhci5ieUdlbmRlci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKCmNvbXBhcmVfbWVhbnMoTUNQMV9yYW5rIH4gUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgsICBkYXRhID0gQUVEQi5DRUEsIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpwNyA8LSBnZ3B1YnI6OmdnYm94cGxvdChBRURCLkNFQSwgCiAgICAgICAgICAgICAgICAgIHggPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiLAogICAgICAgICAgICAgICAgICB5ID0gIk1DUDFfcmFuayIsIAogICAgICAgICAgICAgICAgICB4bGFiID0gIlBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4IiwKICAgICAgICAgICAgICAgICAgeWxhYiA9ICJNQ1AxIHBsYXF1ZSBbcGcvbUxdXG4oSU5ULCBleHAgMSkiLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCIsCiAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAibnBnIiwKICAgICAgICAgICAgICAgICAgZmFjZXQuYnkgPSAiT1J5ZWFyR3JvdXAiLAogICAgICAgICAgICAgICAgICBhZGQgPSAiaml0dGVyIikgKwogIHN0YXRfY29tcGFyZV9tZWFucyhsYWJlbCA9ICJwLmZvcm1hdCIsICBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKZ2dwYXIocDcsIGxlZ2VuZCA9ICJib3R0b20iLCBsZWdlbmQudGl0bGUgPSAiUGxhcXVlIHZ1bG5lcmFiaWxpdHkgaW5kZXgiKQpnZ3NhdmUoZmlsZW5hbWUgPSBwYXN0ZTAoUExPVF9sb2MsICIvIiwgVG9kYXksICIuTUNQMS5wbGFxdWUuZXhwMV9wZ21MLlBsYXF1ZVZ1bG5lcmFiaWxpdHlJbmRleF9GYWNldF9ieVllYXIucGRmIiksIHBsb3QgPSBsYXN0X3Bsb3QoKSkKCmNvbXBhcmVfbWVhbnMoTUNQMV9yYW5rIH4gUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgsIGdyb3VwLmJ5ID0gIkdlbmRlciIsICAgZGF0YSA9IEFFREIuQ0VBLCBtZXRob2QgPSAia3J1c2thbC50ZXN0IikKcDggPC0gZ2dwdWJyOjpnZ2JveHBsb3QoQUVEQi5DRUEsIAogICAgICAgICAgICAgICAgICB4ID0gIlBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4IiwKICAgICAgICAgICAgICAgICAgeSA9ICJNQ1AxX3JhbmsiLCAKICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIsCiAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTUNQMSBwbGFxdWUgW3BnL21MXVxuKElOVCwgZXhwIDEpIiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiR2VuZGVyIiwKICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJucGciLAogICAgICAgICAgICAgICAgICBmYWNldC5ieSA9ICJPUnllYXJHcm91cCIsCiAgICAgICAgICAgICAgICAgIGFkZCA9ICJqaXR0ZXIiKSArCiAgc3RhdF9jb21wYXJlX21lYW5zKGFlcyhncm91cCA9IEdlbmRlciksIGxhYmVsID0gInAuZm9ybWF0IiwgIG1ldGhvZCA9ICJrcnVza2FsLnRlc3QiKQpnZ3BhcihwOCwgbGVnZW5kID0gImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9ICJQbGFxdWUgdnVsbmVyYWJpbGl0eSBpbmRleCIpCmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMChQTE9UX2xvYywgIi8iLCBUb2RheSwgIi5NQ1AxLnBsYXF1ZS5leHAxX3BnbUwuUGxhcXVlVnVsbmVyYWJpbGl0eUluZGV4X0ZhY2V0X2J5WWVhci5wZGYiKSwgcGxvdCA9IGxhc3RfcGxvdCgpKQoKYGBgCgoKCiMjIyBNb2RlbCAxCgpJbiB0aGlzIG1vZGVsIHdlIGNvcnJlY3QgZm9yIF9BZ2VfLCBfR2VuZGVyXywgYW5kIF95ZWFyIG9mIHN1cmdlcnlfLgoKSGVyZSB3ZSB1c2UgdGhlIGludmVyc2UtcmFuayBub3JtYWxpemVkIGRhdGEgLSB2aXN1YWxseSB0aGlzIGlzIG1vcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQuCgpBbmFseXNpcyBvZiB0aGUgcGxhcXVlIHZ1bG5lcmFiaWxpdHkgaW5kZXogYXMgYSBmdW5jdGlvbiBvZiBwbGFxdWUgTUNQMSBsZXZlbHMuCmBgYHtyIENyb3NzU2VjOiBQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCAtIG9yZGluYWwgcmVncmVzc2lvbiBNT0RFTDEgUkFOSywgaW5jbHVkZT1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQpUUkFJVFMuUFJPVEVJTi5SQU5LLmV4dHJhID0gYygiTUNQMV9wZ19tbF8yMDE1X3JhbmsiLCAgIk1DUDFfcmFuayIpCgpHTE0ucmVzdWx0cyA8LSBkYXRhLmZyYW1lKG1hdHJpeChOQSwgbmNvbCA9IDE2LCBucm93ID0gMCkpCmZvciAocHJvdGVpbiBpbiAxOmxlbmd0aChUUkFJVFMuUFJPVEVJTi5SQU5LLmV4dHJhKSkgewogIFBST1RFSU4gPSBUUkFJVFMuUFJPVEVJTi5SQU5LLmV4dHJhW3Byb3RlaW5dCiAgY2F0KHBhc3RlMCgiXG5BbmFseXNpcyBvZiAiLFBST1RFSU4sIi5cbiIpKQogIFRSQUlUID0gIlBsYXF1ZV9WdWxuZXJhYmlsaXR5X0luZGV4IgogICAgY2F0KHBhc3RlMCgiXG4tIHByb2Nlc3NpbmcgIixUUkFJVCwiXG5cbiIpKQogICAgY3VycmVudERGIDwtIGFzLmRhdGEuZnJhbWUoQUVEQi5DRUEgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLiwgUFJPVEVJTiwgVFJBSVQsIENPVkFSSUFURVNfTTEsIE9SZGF0ZV9lcG9jaCkgJT4lCiAgICAgIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkpICU+JQogICAgICBmaWx0ZXJfaWYofmlzLm51bWVyaWMoLiksIGFsbF92YXJzKCFpcy5pbmZpbml0ZSguKSkpICU+JQogICAgICBkcm9wbGV2ZWxzKC4pCiAgICAKICAgICMgZml4IG51bWVyaWMgT1IgeWVhcgogICAgY3VycmVudERGJE9SZGF0ZV95ZWFyIDwtIGFzLm51bWVyaWMoY3VycmVudERGJE9SZGF0ZV95ZWFyKQogICAgCiAgICAjIGZvciBkZWJ1ZwogICAgIyBwcmludChEVDo6ZGF0YXRhYmxlKGN1cnJlbnRERikpCiAgICAjIHByaW50KG5yb3coY3VycmVudERGKSkKICAgICMgcHJpbnQoc3RyKGN1cnJlbnRERikpCiAgICAjIHByaW50KGNsYXNzKGN1cnJlbnRERlssVFJBSVRdKSkKICAgICMgdGFibGUoY3VycmVudERGJE9SZGF0ZV95ZWFyKQogICAgIyMjIHVuaXZhcmlhdGUKICAgICAjICsgSHlwZXJ0ZW5zaW9uLmNvbXBvc2l0ZSArIERpYWJldGVzU3RhdHVzICsgU21va2VyQ3VycmVudCArIAogICAgICMgICAgICAgICAgICBNZWQuU3RhdGluLkxMRCArIE1lZC5hbGwuYW50aXBsYXRlbGV0ICsgR0ZSX01EUkQgKyBCTUkgKyAKICAgICAjICAgICAgICAgICAgQ0FEX2hpc3RvcnkgKyBTdHJva2VfaGlzdG9yeSArIFBlcmlwaGVyYWwuaW50ZXJ2ICsgc3Rlbm9zZQogICAgZml0IDwtIHBvbHIoY3VycmVudERGWyxUUkFJVF0gfiBjdXJyZW50REZbLFBST1RFSU5dICsgQWdlICsgR2VuZGVyICsgT1JkYXRlX3llYXIsIAogICAgICAgICAgICAgIGRhdGEgID0gIGN1cnJlbnRERiwgCiAgICAgICAgICAgICAgSGVzcyA9IFRSVUUpCiAgICBwcmludChzdW1tYXJ5KGZpdCkpCiAgICAKICAgICMjIHN0b3JlIHRhYmxlCiAgICAoY3RhYmxlIDwtIGNvZWYoc3VtbWFyeShmaXQpKSkKCiAgICAjIyBjYWxjdWxhdGUgYW5kIHN0b3JlIHAgdmFsdWVzCiAgICBwIDwtIHBub3JtKGFicyhjdGFibGVbLCAidCB2YWx1ZSJdKSwgbG93ZXIudGFpbCA9IEZBTFNFKSAqIDIKICAgIAogICAgIyMgY29tYmluZWQgdGFibGUKICAgIHByaW50KChjdGFibGUgPC0gY2JpbmQoY3RhYmxlLCAicCB2YWx1ZSIgPSBwKSkpCiAgfQoKCmBgYAoKIyMjIE1vZGVsIDIKCkluIHRoaXMgbW9kZWwgd2UgY29ycmVjdCBmb3IgX0FnZV8sIF9HZW5kZXJfLCBfSHlwZXJ0ZW5zaW9uIHN0YXR1c18sIF9EaWFiZXRlcyBzdGF0dXNfLCBfY3VycmVudCBzbW9rZXIgc3RhdHVzXywgX2xpcGlkLWxvd2VyaW5nIGRydWdzIChMTERzKV8sIF9hbnRpcGxhdGVsZXQgbWVkaWNhdGlvbl8sIF9lR0ZSIChNRFJEKV8sIF9CTUlfLCBfTWVkSHhfQ1ZEXyAoY29tYmluYXRpb24gb2YgX0NBRCBoaXN0b3J5XywgX3N0cm9rZSBoaXN0b3J5XywgYW5kIF9wZXJpcGhlcmFsIGludGVydmVudGlvbnNfKSwgYW5kIF9zdGVub3Npcy5fLgoKCmBgYHtyIENyb3NzU2VjOiBQbGFxdWVfVnVsbmVyYWJpbGl0eV9JbmRleCAtIG9yZGluYWwgcmVncmVzc2lvbiBNT0RFTDIgUkFOSywgaW5jbHVkZT1UUlVFLCBwYWdlZC5wcmludD1UUlVFfQoKZm9yIChwcm90ZWluIGluIDE6bGVuZ3RoKFRSQUlUUy5QUk9URUlOLlJBTksuZXh0cmEpKSB7CiAgUFJPVEVJTiA9IFRSQUlUUy5QUk9URUlOLlJBTksuZXh0cmFbcHJvdGVpbl0KICBjYXQocGFzdGUwKCJcbkFuYWx5c2lzIG9mICIsUFJPVEVJTiwiLlxuIikpCiAgVFJBSVQgPSAiUGxhcXVlX1Z1bG5lcmFiaWxpdHlfSW5kZXgiCiAgICBjYXQocGFzdGUwKCJcbi0gcHJvY2Vzc2luZyAiLFRSQUlULCJcblxuIikpCiAgICBjdXJyZW50REYgPC0gYXMuZGF0YS5mcmFtZShBRURCLkNFQSAlPiUKICAgICAgZHBseXI6OnNlbGVjdCguLCBQUk9URUlOLCBUUkFJVCwgQ09WQVJJQVRFU19NMikgJT4lCiAgICAgIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkpICU+JQogICAgICBmaWx0ZXJfaWYofmlzLm51bWVyaWMoLiksIGFsbF92YXJzKCFpcy5pbmZpbml0ZSguKSkpICU+JQogICAgICBkcm9wbGV2ZWxzKC4pCiAgICAKICAgICMgZml4IG51bWVyaWMgT1IgeWVhcgogICAgY3VycmVudERGJE9SZGF0ZV95ZWFyIDwtIGFzLm51bWVyaWMoY3VycmVudERGJE9SZGF0ZV95ZWFyKQogICAgCiAgICAjIGZvciBkZWJ1ZwogICAgIyBwcmludChEVDo6ZGF0YXRhYmxlKGN1cnJlbnRERikpCiAgICAjIHByaW50KG5yb3coY3VycmVudERGKSkKICAgICMgcHJpbnQoc3RyKGN1cnJlbnRERikpCiAgICAjIHByaW50KGNsYXNzKGN1cnJlbnRERlssVFJBSVRdKSkKICAgICMjIyB1bml2YXJpYXRlCgogICAgZml0IDwtIHBvbHIoYXMuZmFjdG9yKGN1cnJlbnRERlssVFJBSVRdKSB+IGN1cnJlbnRERlssUFJPVEVJTl0gKyBBZ2UgKyBHZW5kZXIgKyBPUmRhdGVfeWVhciArIEh5cGVydGVuc2lvbi5jb21wb3NpdGUgKyBEaWFiZXRlc1N0YXR1cyArIFNtb2tlclN0YXR1cyArIE1lZC5TdGF0aW4uTExEICsgTWVkLmFsbC5hbnRpcGxhdGVsZXQgKyBHRlJfTURSRCArIEJNSSArIE1lZEh4X0NWRCArIHN0ZW5vc2UsCiAgICAgICAgICAgICAgZGF0YSAgPSAgY3VycmVudERGLAogICAgICAgICAgICAgIEhlc3MgPSBUUlVFKQogICAgCiAgICBwcmludChzdW1tYXJ5KGZpdCkpCiAgICAKICAgICMjIHN0b3JlIHRhYmxlCiAgICAoY3RhYmxlIDwtIGNvZWYoc3VtbWFyeShmaXQpKSkKCiAgICAjIyBjYWxjdWxhdGUgYW5kIHN0b3JlIHAgdmFsdWVzCiAgICBwIDwtIHBub3JtKGFicyhjdGFibGVbLCAidCB2YWx1ZSJdKSwgbG93ZXIudGFpbCA9IEZBTFNFKSAqIDIKICAgIAogICAgIyMgY29tYmluZWQgdGFibGUKICAgIHByaW50KChjdGFibGUgPC0gY2JpbmQoY3RhYmxlLCAicCB2YWx1ZSIgPSBwKSkpCiAgfQoKYGBgCgoKCgoKIyBTZXNzaW9uIGluZm9ybWF0aW9uCgotLS0tLS0KCiAgICBWZXJzaW9uOiAgICAgIHYxLjAuMTcKICAgIExhc3QgdXBkYXRlOiAgMjAyMC0wNy0xNAogICAgV3JpdHRlbiBieTogICBTYW5kZXIgVy4gdmFuIGRlciBMYWFuIChzLncudmFuZGVybGFhbi0yW2F0XXVtY3V0cmVjaHQubmwpLgogICAgRGVzY3JpcHRpb246ICBTY3JpcHQgdG8gYW5hbHlzZSBNQ1AxIGZyb20gdGhlIEF0aGVyLUV4cHJlc3MgQmlvYmFuayBTdHVkeS4KICAgIE1pbmltdW0gcmVxdWlyZW1lbnRzOiBSIHZlcnNpb24gMy41LjIgKDIwMTgtMTItMjApIC0tICdFZ2dzaGVsbCBJZ2xvbycsIG1hY09TIE1vamF2ZSAoMTAuMTQuMikuCiAgICAKICAgICoqTW9TQ29XIFRvLURvIExpc3QqKgogICAgVGhlIHRoaW5ncyB3ZSBNdXN0LCBTaG91bGQsIENvdWxkLCBhbmQgV291bGQgaGF2ZSBnaXZlbiB0aGUgdGltZSB3ZSBoYXZlLgogICAgX01fCgogICAgX1NfCiAgICAKICAgIF9DXwogICAgCiAgICAKICAgIF9XXwogICAgCiAgICAKICAgICoqQ2hhbmdlcyBsb2cqKgogICAgKiB2MS4wLjE3IEFkZGVkIHJlZ3VsYXIsIGFuZCBwZXIgZ2VuZGVyIGJveHBsb3RzIGZvciByaXNrIGZhY3RvcnMsIF9ldGNfLiBDaGFuZ2VkIGNvbG9yaW5nIGZvciBjb25zaXN0ZW5jeS4gCiAgICAqIHYxLjAuMTYgQ3JlYXRlIGEgcGcvbUwtb25seSB2ZXJzaW9uLiBTd2l0Y2hlZCB0byBhIG5ldyBgLlJNRGAsIGJ1dCBrZXB0IHZlcnNpb25pbmcuCiAgICAqIHYxLjAuMTUgQWRkIHNleC1zdHJhdGlmaWVkIHBsb3RzIGZvciBNQ1AxIHBsYXF1ZSBsZXZlbHMgYnkgc3ltcHRvbXMgYW5kIHBsYXF1ZSB2dWxuZXJhYmlsaXR5IGluZGV4LgogICAgKiB2MS4wLjE0IEFkZCBhbmFseXNpcyBvbiBwbGFzbWEgYmFzZWQgTUNQMSBsZXZlbHMgbWVhc3VyZWQgdGhyb3VnaCBPTElOSywgbiDCsSA3MDAsIGxpbWl0ZWQgdG8gc3ltcHRvbWF0aWMgcGF0aWVudHMgb25seS4KICAgICogdjEuMC4xMyBTcGxpdHRpbmcgUk1EcyBpbnRvIHBsYXF1ZS1mb2N1c2VkLCBhbmQgb25lIGluY2x1ZGluZyBwbGFzbWEgbGV2ZWxzIG9mIE1DUDEuCiAgICAqIHYxLjAuMTIgQWRkIGJveHBsb3RzIG9mIE1DUDEgbGV2ZWxzIHN0cmF0aWZpZWQgYnkgY29uZm91bmRlci92YXJpYWJsZXMuCiAgICAqIHYxLjAuMTEgQWRkIGFuYWx5c2lzIG9mIHBpbG90IGRhdGEgY29tcGFyaW5nIE9MSU5LLXBsYXRmb3JtIGJhc2VkIE1DUDEgbGV2ZWxzIGluIHBsYXNtYSBhbmQgcGxhcXVlLgogICAgKiB2MS4wLjEwIEFkZCBhbmFseXNlcyBmb3IgYWxsIHRocmVlIGBNQ1AxYCwgYE1DUDFfcGdfbWxfMjAxNWAsIGFuZCBgTUNQMV9wZ191Z18yMDE1YC4gQWRkIGNvbXBhcmlzb24gYmV0d2VlbiBgTUNQMWAsIGBNQ1AxX3BnX21sXzIwMTVgLCBhbmQgYE1DUDFfcGdfdWdfMjAxNWAuIEFkZCAoYW5kIGZpeGVkKSBvcmRpbmFsIHJlZ3Jlc3Npb24uIERvdWJsZSBjaGVja2VkIHdoaWNoIG1lYXN1cmVtZW50IHRvIHVzZS4gCiAgICAqIHYxLjAuOSBBZGRlZCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMgZm9yIE1DUDEgdnMuIGN5dG9raW5lcyBwbGFxdWUgbGV2ZWxzLiBEb3VibGUgY2hlY2tlZCB1cGxvYWQgb2YgTUFDRS1wbG90cy4gQWRkZWQgc3RhdGlzdGljcyBmcm9tIGNvcnJlbGF0aW9uIChoZWF0bWFwKSB0byB0eHQtZmlsZS4KICAgICogdjEuMC44IEZpeGVkIGVycm9yIGluIE1DUDEgcGxhc21hIGFuYWx5c2lzLiBJdCB0dXJucyBvdXQgdGhlIGBNQ1AxYCBhbmQgYE1DUDFfcGdfdWdfMjAxNWAgdmFyaWFibGVzIGFyZSBfYm90aF8gbWVhc3VyZWQgaW4gcGxhcXVlLCBpbiB0d28gc2VwYXJhdGUgZXhwZXJpbWVudHMsIGV4cC4gbm8uIDEgYW5kIGV4cC4gbm8uIDIsIHJlc3BlY3RpdmVseS4gCiAgICAqIHYxLjAuNyBGaXhlZCB0aGUgcGVyIEFnZS1ncm91cCBNQ1AxIEJveCBwbG90cy4gQWRkZWQgY29ycmVsYXRpb25zIHdpdGggb3RoZXIgY3l0b2tpbmVzIGluIHBsYXF1ZXMuCiAgICAqIHYxLjAuNiBPbmx5IGFuYWx5c2VzIGFuZCBmaWd1cmVzIHRoYXQgZW5kIHVwIGluIHRoZSBmaW5hbCBtYW51c2NyaXB0LgogICAgKiB2MS4wLjUgVXBkYXRlIHdpdGggMzAtIGFuZCA5MC1kYXlzIHN1cnZpdmFsLgogICAgKiB2MS4wLjQgVXBkYXRlZCB3aXRoIENveC1yZWdyZXNzaW9ucy4KICAgICogdjEuMC4zIEluY2x1ZGVkIG1vcmUgbW9kZWxzLgogICAgKiB2MS4wLjIgQnVncyBmaXhlZC4KICAgICogdjEuMC4xIEV4dGVuZGVkIHdpdGggbGluZWFyIGFuZCBsb2dpc3RpYyByZWdyZXNzaW9ucy4KICAgICogdjEuMC4wIEluaXRhbCB2ZXJzaW9uLgogICAgCgotLS0tLS0KCmBgYHtyIGV2YWwgPSBUUlVFfQpzZXNzaW9uSW5mbygpCmBgYAoKIyBTYXZpbmcgZW52aXJvbm1lbnQKYGBge3IgU2F2aW5nfQpzYXZlLmltYWdlKHBhc3RlMChQUk9KRUNUX2xvYywgIi8iLFRvZGF5LCIuIixQUk9KRUNUTkFNRSwiLnNhbXBsZV9zZWxlY3Rpb24uUkRhdGEiKSkKYGBgCgotLS0tLS0KPHN1cD4mY29weTsgMTk3OS0yMDIwIFNhbmRlciBXLiB2YW4gZGVyIExhYW4gfCBzLncudmFuZGVybGFhbi0yW2F0XXVtY3V0cmVjaHQubmwgfCBbc3d2YW5kZXJsYWFuLmdpdGh1Yi5pb10oaHR0cHM6Ly9zd3ZhbmRlcmxhYW4uZ2l0aHViLmlvKS48L3N1cD4KLS0tLS0tCgo=